“anaconda”是否为每个新环境创建一个单独的PYTHONPATH变量



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

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

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

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

有人知道这个问题的答案,或者找到了解决这个问题的方法吗?

Anaconda不使用PYTHONPATH。然而,应该注意的是,如果设置了PYTHONPATH,它可以用于加载不在anaconda环境中的库。这就是为什么在激活环境之前,进行可能是件好事

unset PYTHONPATH

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

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-lib:

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

不,Anaconda环境唯一需要修改的是PATH(这样它就可以从环境bin/目录或Windows上的Scripts中获得正确的Python)。

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

最新更新