回答:
新しいディレクトリを環境変数に追加する必要があります。環境変数はPYTHONPATH
、以前の内容からコロンで区切ってください。Unixのどの形式で.profile
も、使用しているシェル(または、お気に入りのシェルによっては何でも)に適した起動スクリプトで、問題のシェルに依存するコマンドを使用してそれを行うことができます。Windowsでは、目的に応じてシステムGUIから実行できます。
superuser.com
それ自体はプログラミングの質問ではないので、選択したプラットフォームとシェルで環境変数を強化する方法の詳細が必要な場合は、詳細を確認するのに適しています。
(MacまたはGNU / Linuxディストリビューションで)bashを使用している場合は、これを ~/.bashrc
export PYTHONPATH="${PYTHONPATH}:/my/other/path"
sudo su
.bashrcファイルの最初に置くことは悪い考えだと思います。この投稿は私に同意します。私のシステムでは、少なくともそれは必要ありません。
操作PYTHONPATH
する代わりに、パス構成ファイルを作成することもできます。まず、Pythonがこの情報を検索するディレクトリを見つけます。
python -m site --user-site
何らかの理由で、これはPython 2.7では機能しないようです。そこで使用できます:
python -c 'import site; site._script()' --user-site
次に、.pth
追加するパスを含むファイルをそのディレクトリに作成します(存在しない場合はディレクトリを作成します)。
例えば:
# find directory
SITEDIR=$(python -m site --user-site)
# create if it doesn't exist
mkdir -p "$SITEDIR"
# create new .pth file with our path
echo "$HOME/foo/bar" > "$SITEDIR/somelib.pth"
python -m site --user-site
と(create the directory if it doesn't exist)
パーツはそれを機能させるために欠けていたものでした。
somelib.pth
ますか?そうでない場合、なぜこれが機能しない可能性があるのでしょうか?
これはWindowsで動作します
次に、スクリプトからのこれらのパス内のすべてのモジュールを表示できます。
pythonrcファイルを介してパスを追加できます。デフォルトでは、Linuxでは〜/ .pythonrcです。すなわち。
import sys
sys.path.append('/path/to/dir')
PYTHONPATH
環境変数は、~/.profile
macやlinux などのグローバルrcファイルで設定することも、コントロールパネル->システム->詳細設定タブ-> Windows の環境変数で設定することもできます。
もう少し説明すると、Pythonは(上記およびここで述べたように)site.py
スクリプトを使用して(通常はsys.prefix + lib/python<version>/site-packages
と同様にlib/site-python
)検索パスを自動的に構築します。sys.prefixの値を取得できます。
python -c 'import sys; print(sys.prefix)'
site.pyスクリプトは、その後のようなプラットフォームに依存したディレクトリ、の番号を追加し/usr/{lib,share}/python<version>/dist-packages
、/usr/local/lib/python<version>/dist-packages
検索パスにしてもため、これらのパス検索し<package>.pth
、特定の追加の検索パスを含むファイルをConfig]を。たとえば、easy-installは、システム固有のファイル(Ubuntuなど)に追加されるインストール済みパッケージのコレクションを維持します/usr/local/lib/python2.7/dist-packages/easy-install.pth
。典型的なシステムでは、sys.pathの予期しないパスを説明できるこれらの.pthファイルがたくさんあります。
python -c 'import sys; print(sys.path)'
したがって、.pthファイルを作成して、これらのディレクトリ(上記の sitedirを含む)のいずれかに置くことができます。これは、PYTHONPATHを使用するのではなく、ほとんどのパッケージがsys.pathに追加される方法のようです。
注:オンOSX「フレームワークのビルド」(しかし、パイソンの通常のコマンドラインでの使用のために働くようだ)のためsite.pyによって追加の特別な追加の検索パスがあります:/Library/Python/<version>/site-packages
(例Python2.7用:/Library/Python/2.7/site-packages/
)サードパーティのパッケージを想定しているところでありますインストールする(そのディレクトリのREADMEを参照)。1と呼ばれるファイルを作成例えば、追加の検索パスが含まにパス構成ファイルを追加することができるように/Library/Python/2.7/site-packages/pip-usr-local.pth
含まれている/usr/local/lib/python2.7/site-packages/
し、システムのpythonは、その検索パスを追加します。
私にとっては、.bash_profile
ファイルを変更したときにうまくいきました。.bashrc
ファイルを変更するだけで、シェルを再起動するまで機能しました。
Python 2.7の場合、次のようになります。
export PYTHONPATH="$PYTHONPATH:/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python"
.bash_profile
ファイルの最後。
export PYTHONPATH="${PYTHONPATH}:/my/other/path"
〜/ .bashrcへの追加は、PYTHONPATH
(が原因で:
)現在存在しない場合は機能しない可能性があります。
export PYTHONPATH="/my/other/path1"
export PYTHONPATH="${PYTHONPATH}:/my/other/path2"
上記を〜/ .bashrcに追加すると、Ubuntu 16.04でうまくいく
echo PYTHONPATH
、そして何も現れなかった!つまり、このPYTHONPATHは初期化されていないので、この行export PYTHONPATH=$PYTHONPATH:<PATH_TO_TF>/TensorFlow/models/research/object_detection
を~/.bashrc
ファイルに貼り付けますsource ~/.bashrc
。後で、 `echo $ PYTHONPATH` :<PATH_TO_TF>/TensorFlow/models/research/object_detection
を実行したときにが表示されました。何か間違ったことをしたかどうかに関する提案はありますか?
export PYTHONPATH=<PATH_TO_TF>/TensorFlow/models/research/object_detection
、PYTHONPATHを初めてエクスポートするときは、${PYTHONPATH}:
部分なしで実行する必要があります
:<PATH_TO_TF>/TensorFlow/models/research/object_detection
、2番目のパスが削除されexport PYTHONPATH=$PYTHONPATH:/TensorFlow/models/research/slim
ます。その上で何か提案、それを修正する方法?
以下のスクリプトは、純粋なPythonであるため、すべてのプラットフォームで機能します。ここではhttps://docs.python.org/3/library/pathlib.htmlに記載されているpathlib Pathを使用して、クロスプラットフォームで動作するようにします。一度実行して、カーネルを再起動すればそれだけです。https://medium.com/@arnaud.bertrand/modifying-python-s-search-path-with-pth-files-2a41a4143574に触発されました。
from pathlib import Path
to_add=Path(path_of_directory_to_add)
from sys import path
if str(to_add) not in path:
minLen=999999
for index,directory in enumerate(path):
if 'site-packages' in directory and len(directory)<=minLen:
minLen=len(directory)
stpi=index
pathSitePckgs=Path(path[stpi])
with open(str(pathSitePckgs/'current_machine_paths.pth'),'w') as pth_file:
pth_file.write(str(to_add))
これはこのスレッドの更新で、古い回答がいくつかあります。
MAC-OS Catalinaまたはそれより新しい(> = 10.15)を使用している人のzsh
ために、(古いものの代わりに)という名前の新しいターミナルが導入されましたbash
)。
この変更により、上記の回答にいくつかの問題がありました。ファイル~/.zshrc
を作成し、ファイルディレクトリをに貼り付けて$PATH
、$PYTHONPATH
だから、最初に私はやった:
nano ~/.zshrc
エディターを開いたときに、次のコンテンツを貼り付けました。
export PATH="${PATH}:/Users/caio.hc.oliveira/Library/Python/3.7/bin"
export PYTHONPATH="${PYTHONPATH}:/Users/caio.hc.oliveira/Library/Python/3.7/bin"
それを保存し、端末を再起動しました。
重要:上記のパスは私のコンピューターのパスに設定されています。Pythonに合わせる必要があります。
Python 3.6.4では、次のようにpythonセッション全体でsys.pathを永続化できます。
import sys
import os
print(str(sys.path))
dir_path = os.path.dirname(os.path.realpath(__file__))
print(f"current working dir: {dir_path}")
root_dir = dir_path.replace("/util", '', 1)
print(f"root dir: {root_dir}")
sys.path.insert(0, root_dir)
print(str(sys.path))
virtualenvとvirtualenvwrapperを使用することを強くお勧めします。そうしないと、パスが乱雑になります。