PYTHONPATHにディレクトリを永続的に追加しますか?


324

を使用するたびにsys.path.append、新しいディレクトリが追加されます。ただし、Pythonを閉じると、リストは以前の(デフォルト?)値に戻ります。にディレクトリを永続的に追加するにはどうすればよいPYTHONPATHですか?

回答:


135

新しいディレクトリを環境変数に追加する必要があります。環境変数はPYTHONPATH、以前の内容からコロンで区切ってください。Unixのどの形式で.profileも、使用しているシェル(または、お気に入りのシェルによっては何でも)に適した起動スクリプトで、問題のシェルに依存するコマンドを使用してそれを行うことができます。Windowsでは、目的に応じてシステムGUIから実行できます。

superuser.com それ自体はプログラミングの質問ではないので、選択したプラットフォームとシェルで環境変数を強化する方法の詳細が必要な場合は、詳細を確認するのに適しています。


8
正誤表:Windowsのセパレータはセミコロンになります。Windowsでシステムパスをオーバーライドする必要がある場合は、ユーザー変数がシステム変数に追加されるため、GUIを介してユーザー環境変数として設定するだけでは不十分な場合があります。このような場合は、必要な調整を行う起動スクリプトを使用する必要があります。
Nathan Ernst、

1
@Nathan、セミコロンのリマインダーはtxですが(もちろん管理者の場合)Windowsでシステムの env.varsを設定できます(さらに、OPはパスを上書きする方法を尋ねず、追加する方法を尋ねるだけです)なので、ユーザーenv.varも問題ありません!-)。
Alex Martelli、2010

残念ながら私は仕事用PCの管理者ではないので、そのような手段を講じる必要があります。:(
Nathan Ernst

439

(MacまたはGNU / Linuxディストリビューションで)bashを使用している場合は、これを ~/.bashrc

export PYTHONPATH="${PYTHONPATH}:/my/other/path"

28
これは完璧に機能しましたが、指定するディレクトリがディレクトリ構造の最上位のinit .pyファイルにあることを確認してください。これは、最初は完全に明確ではありませんでした。たとえば、エクスポートPYTHONPATH = $ PYTHONPATH:/ Users / joey / reposを試しましたが、リポジトリディレクトリに_ init_ .py がなかったため、機能しませんでした。/ Users / joey / repos / specificRepoがさらに1つのディレクトリを下に移動しました。これで、Pythonはinit .py を含むspecificRepoディレクトリに接続されている下位ディレクトリをすべて通過できるようになりました。
Qiao Yi

3
これは私にとってはうまくいきましたが、このPYTHONPATH変数がどこにあるのか説明できますか?そして、「export PYTHONPATH」は、その正確なファイルを見つけるためにどのように知っていますか?
appleLover 2013年

42
あなたの編集後に覚えて~/.bashrc実行し、その後source ~/.bashrc参照stackoverflow.com/questions/2518127/...
b_dev

2
sudo su.bashrcファイルの最初に置くことは悪い考えだと思います。この投稿は私に同意します。私のシステムでは、少なくともそれは必要ありません。
LondonRob 2014

これが答えです。
Aerin

88

操作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 2.6を使用してこれを試しましたが、私にはうまくいかないようです
Lorcan O'Neill

4
このディレクトリを自分のライブラリディレクトリにシンボリックリンクし、すべてのスクリプトをそこに保存しました。うまくいきました。
firesofmay 2013年

このトピックを再度見つけた後、再試行して解決し、今回は上記のように機能させることができました!賛否両論あり、謝罪:)
Lorcan O'Neill

これは完璧に機能し、私は正しい軌道に乗っていましたが、python -m site --user-site(create the directory if it doesn't exist)パーツはそれを機能させるために欠けていたものでした。
オーレリアンOoms

1
追加されたパスをpythonが認識するように、追加の手順を実行する必要がありsomelib.pthますか?そうでない場合、なぜこれが機能しない可能性があるのでしょうか?
Miladiouss

38

これはWindowsで動作します

  1. Windowsでは、Python 2.7の場合、Pythonセットアップフォルダーに移動します。
  2. Lib / site-packagesを開きます。
  3. このフォルダーにexample.pth空のファイルを追加します。
  4. 各行に1つずつ、必要なパスをファイルに追加します。

次に、スクリプトからのこれらのパス内のすべてのモジュールを表示できます。


3
IMO、これはシェルや作業環境の選択に依存しないため、最良のソリューションです。Linuxでも機能します。デフォルトのpythonパスは「/usr/local/lib/pythonX.Y/site-packages」です。それが機能しない場合は、代わりに.pthファイルをdist-packagesディレクトリに配置してみてください。
matus

1
Windows 7、Python 3.6.5。これが答えです。auserdudeが書いたように:PythonのLib / site-packagesフォルダーに「example.pth」を作成し、次のようにパスを追加します。C:\ somefolder \ anotherfolder \ targetfolder
JayJay123

優れた答えは、windows 10のpython 3.7でも動作します。windows10のパスは次のとおりです: "C:\ Users \ {usrName} \ AppData \ Local \ Programs \ Python \ Python37-32 \ Lib"
Ali80

Windows 10のPython 3.6.7で動作することを確認できます。ただし、パスがPYTHONPATHに追加されることに注意してください。これは、名前が衝突した場合、追加されたモジュールが見つからないことを意味します。
BramAppel

25

まだ混乱している場合のために-Macを使用している場合は、次の操作を行います。

  1. ターミナルを開く
  2. タイプ open .bash_profile
  3. ポップアップするテキストファイルで、最後に次の行を追加します。 export PYTHONPATH=$PYTHONPATH:foo/bar
  4. ファイルを保存してターミナルを再起動すれば完了です

2
Pythonのパスを確認する方法を
知り

端末もリロードする必要があることを確認してください
User

実際には、exportキーは私が欠けていたものでした!!!!、賛成、たくさんありがとう!
a_m_dev

21

pythonrcファイルを介してパスを追加できます。デフォルトでは、Linuxでは〜/ .pythonrcです。すなわち。

import sys
sys.path.append('/path/to/dir')

PYTHONPATH環境変数は、~/.profilemacやlinux などのグローバルrcファイルで設定することも、コントロールパネル->システム->詳細設定タブ-> Windows の環境変数で設定することもできます。


40
sys.path.append( '/ path / to / dir')はエントリを永続的に追加しません。
jeremyjjbrown 2012

15

もう少し説明すると、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は、その検索パスを追加します。


10

私にとっては、.bash_profileファイルを変更したときにうまくいきました。.bashrcファイルを変更するだけで、シェルを再起動するまで機能しました。

Python 2.7の場合、次のようになります。

export PYTHONPATH="$PYTHONPATH:/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python"

.bash_profileファイルの最後。


1
私が正しく理解している場合、これは端末のみから起動されたPythonセッションの変数をエクスポートしますか?
jxramos

1
@jxramos-はい!
Peter Piper

9

Linuxでは、環境変数を扱うことなく、パッケージからPYTHONPATHのディレクトリへのシンボリックリンクを作成できます。何かのようなもの:

ln -s /your/path /usr/lib/pymodules/python2.7/

7

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を実行したときにが表示されました。何か間違ったことをしたかどうかに関する提案はありますか?
Anu

export PYTHONPATH=<PATH_TO_TF>/TensorFlow/models/research/object_detection、PYTHONPATHを初めてエクスポートするときは、${PYTHONPATH}:部分なしで実行する必要があります
ボヤンジェ

ありがとうございます。ただし、コンピュータを再起動するたびに、Pythonパスが最初のパスにリセットされ:<PATH_TO_TF>/TensorFlow/models/research/object_detection、2番目のパスが削除されexport PYTHONPATH=$PYTHONPATH:/TensorFlow/models/research/slimます。その上で何か提案、それを修正する方法?
Anu

7

MacOSでは、特定のライブラリへのパスを与える代わりに。のルートプロジェクトフォルダーへの完全パスを与える

~/.bash_profile 

たとえば、私の日を作りました:

export PYTHONPATH="${PYTHONPATH}:/Users/<myuser>/project_root_folder_path"

この後:

source ~/.bash_profile

6

awesomoの答えを追加するために、その行を~/.bash_profileorに追加することもできます~/.profile


.bash_profileログインシェルを使用する場合は追加し、それ以外の場合は.profile
smac89

3

PYTHONPATHに新しいパスを追加するには、次のように手動で行います。

〜/ .bashrcプロファイルへのパスをターミナルで追加します。

vim ~/.bashrc

以下をあなたのプロフィールに貼り付けてください

export PYTHONPATH="${PYTHONPATH}:/User/johndoe/pythonModule"

次に、ターミナルでコードを実行するときは、必ずbashrcプロファイルを入手してください。

source ~/.bashrc 

お役に立てれば。


2

Windows Vista、Python 3.5に永続的に追加しました

システム>コントロールパネル>詳細システム設定>詳細(タップ)環境変数>システム変数>(変数列にPYTHONPATHが表示されない場合)(クリック)新規>変数名:PYTHONPATH>変数値:

変数値にディレクトリを書き込んでください。ブルーペッパーズの答えの詳細です。


1

以下のスクリプトは、純粋な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))

1

これはこのスレッドの更新で、古い回答がいくつかあります。

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に合わせる必要があります。


0

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を使用することを強くお勧めします。そうしないと、パスが乱雑になります。


-3

A <-> B間の最短経路は直線です。

import sys
if not 'NEW_PATH' in sys.path:
  sys.path += ['NEW_PATH']
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.