web-dev-qa-db-ja.com

Pythonを使って自分のpythonパスを調べる方法は?

Pythonスクリプト(または対話型シェル)の中から、自分のシステムのPYTHONPATH変数にリストされているディレクトリをどのように見つけるのですか?

300
Paul D. Waite

sys.pathには、あなたのPYTHONPATH環境変数に特に含まれていない項目が含まれるかもしれません。変数を直接問い合わせるには、次のようにします。

import os
try:
    user_paths = os.environ['PYTHONPATH'].split(os.pathsep)
except KeyError:
    user_paths = []
197
Mark Ransom

あなたはおそらくこれも欲しいでしょう:

import sys
print(sys.path)

またはターミナルからワンライナーとして:

python -c "import sys; print('\n'.join(sys.path))"
519
Vanuan

他の答えを編集することはできません。それはWindowsのみであるという点で軽微なエラーがあります。より一般的な解決策は、以下のようにos.sepを使用することです。

sys.pathには、PYTHONPATH環境変数に特に含まれていない項目が含まれている可能性があります。変数を直接問い合わせるには、次のようにします。

import os
os.environ['PYTHONPATH'].split(os.pathsep)
10
Vitali

PYTHONPATHは、値がディレクトリのリストである環境変数です。一度設定されると、他の標準入力とともに、インポートされたモジュールを検索するためにPythonによって使用されます。 Pythonの "sys.path"にリストされているサードパーティのライブラリディレクトリ。

他の環境変数と同様に、あなたはそれをShellまたは〜/ .bashrcにエクスポートすることができます。 here を参照してください。以下に示すように、os.environ ['PYTHONPATH']にPythonでその値を問い合わせることができます。

$ python3 -c "import os, sys; print(os.environ['PYTHONPATH']); print(sys.path) if 'PYTHONPATH' in sorted(os.environ) else print('PYTHONPATH is not defined')"

以下のようにシェルで定義されているIF

$ export PYTHONPATH=$HOME/Documents/DjangoTutorial/mysite

その結果=>

/home/Documents/DjangoTutorial/mysite
['', '/home/Documents/DjangoTutorial/mysite', '/usr/local/lib/python37.Zip', '/usr/local/lib/python3.7', '/usr/local/lib/python3.7/lib-dynload', '/usr/local/lib/python3.7/site-packages']

ELSE結果=>

PYTHONPATH is not defined

PYTHONPATHを複数のパスに設定するには、 here を参照してください。

実行時にsys.path.insert()、delまたはremove()を介して検索パスを追加または削除できますが、os.environ []を介してはできません。例:

>>> os.environ['PYTHONPATH']="$HOME/Documents/DjangoTutorial/mysite"
>>> 'PYTHONPATH' in sorted(os.environ)
True
>>> sys.path // but Not there
['', '/usr/local/lib/python37.Zip', '/usr/local/lib/python3.7', '/usr/local/lib/python3.7/lib-dynload', '/usr/local/lib/python3.7/site-packages']

>>> sys.path.insert(0,os.environ['PYTHONPATH'])
>>> sys.path // It's there
['$HOME/Documents/DjangoTutorial/mysite', '', '/usr/local/lib/python37.Zip', '/usr/local/lib/python3.7', '/usr/local/lib/python3.7/lib-dynload', '/usr/local/lib/python3.7/site-packages']
>>> 

まとめると、PYTHONPATHはsys.pathにインポートされたモジュールのPython検索パスを指定する1つの方法です。 PYTHONPATHを使わずにsys.pathに直接リスト操作を適用することもできます。

1
Leon Chang