`anaconda` 是不是为每个新环境创建一个单独的 PYTHONPATH 变量?

Posted

技术标签:

【中文标题】`anaconda` 是不是为每个新环境创建一个单独的 PYTHONPATH 变量?【英文标题】:Does `anaconda` create a separate PYTHONPATH variable for each new environment?`anaconda` 是否为每个新环境创建一个单独的 PYTHONPATH 变量? 【发布时间】:2013-06-27 12:51:36 【问题描述】:

我开始使用来自 Continuum.io 的 Python Anaconda 发行版来完成scipy 的工作。 我已经能够让 Anaconda 启动并运行,但我不知道 Anaconda 是否为它创建的每个新环境创建了一个新的 PYTHONPATH 环境变量,或者它是否依赖于公共系统 PYTHONPATH .

我在文档中找不到这方面的任何信息。

此外,当我执行printenv 时,我没有在新创建的环境中看到PYTHONPATH 变量——尽管我确实找到了一些新的anaconda 创建的环境变量。

我能找到的最好的方法是 Anaconda 在 PATH 变量的头部添加了一些 Anaconda 目录和新环境目录——但这并不一定将新包与系统环境隔离,但很接近。

有没有人知道这个问题的答案或找到解决这个问题的方法?

【问题讨论】:

但不是每个 Python 包都可以在 Anaconda 中使用,那么当你也使用 pip 安装包时怎么办?然后您确实需要一个(特定于 Python 版本的)PYTHONPATH,因此您需要担心在每个 shell 中更改/设置它/每次获取 activate 脚​​本以更改 Python 版本。对吗? 【参考方案1】:

Anaconda 不使用PYTHONPATH。但是应该注意,如果设置了PYTHONPATH,它可以用于加载不在 anaconda 环境中的库。这就是为什么在激活环境之前最好做一个

unset PYTHONPATH

例如,这个 PYTHONPATH 指向了一个不正确的 pandas 库:

export PYTHONPATH=/home/john/share/usr/anaconda/lib/python
source activate anaconda-2.7
python
>>>> import pandas as pd
/home/john/share/usr/lib/python/pandas-0.12.0-py2.7-linux-x86_64.egg/pandas/hashtable.so: undefined symbol: PyUnicodeUCS2_DecodeUTF8
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/john/share/usr/lib/python/pandas-0.12.0-py2.7-linux-x86_64.egg/pandas/__init__.py", line 6, in <module>
    from . import hashtable, tslib, lib
ImportError: /home/john/share/usr/lib/python/pandas-0.12.0-py2.7-linux-x86_64.egg/pandas/hashtable.so: undefined symbol: PyUnicodeUCS2_DecodeUTF8

取消设置 PYTHONPATH 可以防止加载错误的 pandas 库:

unset PYTHONPATH
source activate anaconda-2.7
python
>>>> import pandas as pd
>>>>

【讨论】:

使用 PYTHONPATH 指向本地生成的文件和模块是否安全?有没有比使用 PYTHONPATH 更好的方法? 我猜开发人员工作正常。我倾向于从包含我正在处理的模块的目录中运行 python,这基本上是一样的。您还可以使用 pip install -e python_module_dir 加载 anaconda 环境,这样您就无需更新 PYTHONPATH【参考方案2】:

不,对于 Anaconda 环境,唯一需要修改的是 PATH(以便它从环境 bin/ 目录或 Windows 上的 Scripts\ 获取正确的 Python)。

Anaconda 环境的工作方式是硬链接安装到环境中的所有内容。出于所有意图和目的,这意味着每个环境都是 Python 和所有包的完全独立安装。通过使用硬链接,这可以有效地完成。因此,没有必要弄乱 PYTHONPATH,因为环境中的 Python 二进制文件已经搜索了环境中的站点包和环境的 lib 等等。

【讨论】:

在 Windows 机器上使用它和两个安装的 PYTHONPATH 肯定不同。 anaconda 里面没有我的模块目录。作为参考,我从 Windows 7 的高级系统设置中添加了它。从 python 看起来很好,它在 ipython 笔记本中它被打破了

以上是关于`anaconda` 是不是为每个新环境创建一个单独的 PYTHONPATH 变量?的主要内容,如果未能解决你的问题,请参考以下文章

Anaconda(python)安装教程以及创建新环境

无法使用最新下载的 Anaconda 创建新的 python 3.5 环境

解决新创建的anaconda环境在C:Usersxxx.condaenvs,而不在anaconda安装目录下的envs中

Anaconda基础操作

踩坑:anaconda创建虚拟环境

Anaconda配置环境(详细)