Pythonスクリプトで、PYTHONPATHを設定するにはどうすればよいですか?


115

/ etc / profileと環境変数に設定する方法を知っています。

しかし、スクリプト中に設定したい場合はどうなりますか?それはOS、sysをインポートしていますか?どうすればいいのですか?

回答:


192

設定せずPYTHONPATH、にエントリを追加しますsys.path。これは、Pythonパッケージを検索するディレクトリのリストなので、ディレクトリをそのリストに追加するだけです。

sys.path.append('/path/to/whatever')

実際、パス区切り文字(Linuxのようなシステムでは、Windows)sys.pathの値を分割することによって初期化されます。PYTHONPATH:;

を使用してディレクトリを追加することもできます。このsite.addsitedir方法では.pth、渡したディレクトリ内に存在するファイルも考慮されます。(これは、で指定するディレクトリには当てはまりませんPYTHONPATH。)


11
この回答が投稿されてから何年も経っていますが、インポート時にPythonが他のすべてのディレクトリよりも前に新しいディレクトリをチェックすることを確認したい場合は、リストの最初に新しいディレクトリを配置する必要があります。の中でsys.path.insert(0, '/path/to/whatever')
wecsam 2017年

39

次の方法で環境変数を取得および設定できますos.environ

import os
user_home = os.environ["HOME"]

os.environ["PYTHONPATH"] = "..."

ただし、インタプリタはすでに実行されているため、これは効果がありません。あなたは使う方が良いです

import sys
sys.path.append("...")

これは、PYTHONPATHインタプリタの起動時に変換される配列です。


18

あなたが入れた場合sys.path.append('dir/to/path')、それはすでに追加され、チェックせずに、あなたは、長いリストを生成することがありましたsys.path。そのため、私はこれをお勧めします:

import sys
import os # if you want this directory

try:
    sys.path.index('/dir/path') # Or os.getcwd() for this directory
except ValueError:
    sys.path.append('/dir/path') # Or os.getcwd() for this directory

2
いいね。非常にPythonic。
PartialOrder 2017

1
PythonPathを空にするにはどうすればよいですか?追加したくありません。それを空にして、欲しいものだけを中に入れたいです。これを行う方法はありますか?
シュッツェ

sys.path .__ init __()を呼び出して再初期化してみましたか?これはpythonパスを空にする必要があります。お役に立てれば。
Thayz、

@ francisco-manuel-garca-botella古い質問に答えることは、このサイトで大歓迎です!申し訳ありません。
user7610

私はこれがpythonicであることに同意しません、そしてそれが良いプログラミングアプローチではないことを提案します。例外が発生した場合の例外処理は非常に負荷が高いため、「if」ステートメントを置き換えて、elseを使用する可能性が非常に高い場合は、例外処理を使用しないでください。sys.pathの単純な 'mypath' ...それ以外の場合...は私のアドバイスです。
markgalassi

6

PYTHONPATHはsys.pathになり、実行時に変更できます。

import sys
sys.path += ["whatever"]

@DavidZからの回答よりもこの回答を好む理由はありますか?
ドロール

他に何もない場合、それはそれほど冗長ではありません。
tripleee

-1

あなたが設定できるPYTHONPATHことで、os.environ['PATHPYTHON']=/some/path、その後、あなたが呼び出す必要がos.system('python')新しく追加されたパスを有効にするためのpythonシェルを再起動します。


1
os.system()「Pythonシェルを再起動する」のではなく、新しいインタラクティブなPythonインスタンスを起動します。そこから戻ると、呼び出し元のスクリプトに戻ります。
tripleee

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