web-dev-qa-db-ja.com

`anaconda`は新しい環境ごとに個別のPYTHONPATH変数を作成しますか?

scipyの作業を行うために、Continuum.ioのPython Anacondaディストリビューションで作業を開始しています。
Anacondaを起動して実行することはできましたが、Anacondaが新しいPYTHONPATH環境変数を作成するかどうか作成する新しい環境ごとにか、それとも共通システムPYTHONPATHに依存しています。

ドキュメントでこれに関する情報を見つけることができませんでした。

さらに、printenvを実行したときに、新しく作成された環境にPYTHONPATH変数が表示されませんでしたが、いくつかの新しいanaconda作成の環境変数が見つかりました。

私が見つけることができる最良の方法は、AnacondaがいくつかのAnacondaディレクトリと新しい環境ディレクトリをPATH変数の先頭に追加したことですが、これは必ずしも新しいパッケージをシステム環境から分離するわけではありませんが、近いです。

誰もがこの質問への答えを知っているか、この懸念に対処する方法を見つけましたか?

38
krishnab

いいえ、Anaconda環境で変更する必要があるのはPATHだけです(そのため、環境bin/ディレクトリ、またはScripts\から正しいPython Windowsで)。

Anaconda環境が機能する方法は、環境にインストールされるすべてのものをハードリンクすることです。すべての意図と目的において、これは、各環境がPythonとすべてのパッケージの完全に別個のインストールであることを意味します。ハードリンクを使用することにより、これは効率的に行われます。 PYTHONPATHは、環境内のPythonバイナリが既に環境内のサイトパッケージ、環境のlibなどを検索しているためです。

28
asmeurer

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
>>>>
28
inodb