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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了`anaconda`是否为每个新环境创建一个单独的PYTHONPATH变量?相关的知识,希望对你有一定的参考价值。

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

我在文档中找不到任何相关信息。

此外,当我做了printenv时,我没有在新创建的环境中看到PYTHONPATH变量 - 虽然我确实找到了一些新的anaconda创建的环境变量。

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

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

答案

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

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

另一答案

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

unset PYTHONPATH

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

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`是否为每个新环境创建一个单独的PYTHONPATH变量?的主要内容,如果未能解决你的问题,请参考以下文章

为每个视图 iOS 创建单独的视图控制器?

我是不是需要为每个 iOS 报亭问题创建单独的 IAP?

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

Anaconda使用使用Navigator或者prompt创建虚拟环境

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

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