Pythonを使用してPythonパスを見つけるにはどうすればよいですか?


350

PYTHONPATHPythonスクリプト(またはインタラクティブシェル)内から、システムの変数にリストされているディレクトリを確認するにはどうすればよいですか?


24
何をしようとしているのかはわかりませんが、インポートするモジュールの検索に使用するフォルダーを知りたい場合は、に依存しないでくださいPYTHONPATHsys.pathそのために使用します。
Vanuan

簡単な実験により、以下のVanuanの答え(sys.pathの出力)がPYTHONPATHを出力するだけであることがわかりました。これは、PYTHONPATHに追加するadd_path(new_path)を使用して値を変更した後に機能します。
Chan Kim

6
この投稿のタイトルと本文は、2つの異なる質問をします。sys.path「モジュールの検索パスを指定する文字列のリスト」-docs.python.org/2/library/sys.html#sys.pathです。PYTHONPATHは、このリストに影響を与える環境変数です。適切な定義でsys.pathは、「Pythonパス」です。
spinkus 2016年

4
忘れないでくださいpython -m site
Andrew

回答:


236

sys.path特にPYTHONPATH環境変数に含まれていない項目が含まれている可能性があります。変数を直接クエリするには、次を使用します。

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

3
(または、より一般的には... split(os.sep))。なぜあなたは愛を得ていないのか理解できません、マーク。あなたの回答は、Paul D Waiteが彼の質問に答えたときよりも技術的に正確です????
mjv 2009

5
os.sepが間違っている、参照stackoverflow.com/questions/1499019/...
マーク身代金

2
そして、セパレーターに関するその問題が、おそらく私が愛を得ることができなかった理由です。私をまっすぐに設定してくれてありがとう。
Mark Ransom

11
また、KeyErrorを受け取った場合、それはPYTHONPATHがシステムで定義されていないことを意味しますか?問題ありますか?ありがとう
glarrain

9
@glarrin、正しい-KeyErrorは、PYTHONPATHが定義されていないことを意味します。デフォルトのパスがすでに設定されているので、問題にはなりませんsys.path。を参照してください。
Mark Ransom 2011

600

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

import sys
print(sys.path)

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

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

警告:複数のバージョンのPythonがインストールされている場合は、対応するコマンドpython2またはを使用する必要がありますpython3


同じ。Linux aaa.com 2.6.18-4-686-bigmem#1 SMP Wed Jun 6 09:41:07 UTC 2007 i686 GNU / Linux ... Debian Sarge
Spechal

7
これは、現在のランタイムのpythonパスを取得するための、プラットフォームおよび環境に依存しない方法です。
ドミトリー・ミンコフスキー2012年

13
この答えは、受け入れられた答えよりも私の状況にはるかに役立ちました。私は自分の環境変数が何であるかを知っています。Pythonが環境変数のほかにどこを指すことにしたかを知る必要がありました。
渦度2013

Python 3の場合python -c "import sys; print('\n'.join(sys.path))"
mirceamironenco 2017

@mirceamironencoが変更されました
バヌアン2017

10

他の回答は編集できないようです。Windows専用であるため、小さなエラーが発生します。より一般的な解決策は、以下のようにos.sepを使用することです。

sys.pathには、特にPYTHONPATH環境変数に含まれていない項目が含まれている場合があります。変数を直接クエリするには、次を使用します。

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

6
今後の読者向け:os.sepオペレーティングシステムのディレクトリ区切り文字を返します /。Pythonパスで使用されるセパレータは異なり、os.pathsep受け入れられた回答に示されているようにによって返されます。
ポールD.ウェイト

3

PYTHONPATHは環境変数であり、その値はディレクトリのリストです。設定すると、Pythonは他のstdとともにインポートされたモジュールを検索するために使用します。Pythonの「sys.path」にリストされているサードパーティのライブラリディレクトリ。

他の環境変数と同様に、シェルまたは〜/ .bashrcにエクスポートできます。こちらを参照してください。以下に示すように、Pythonでos.environ ['PYTHONPATH']の値をクエリできます。

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

シェルで次のように定義されています

$ 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を複数のパスに設定するには、ここを参照してください

実行時に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は、インポートされたモジュールのPython検索パスをsys.pathに指定する1つの方法です。PYTHONPATHを使用せずに、リスト操作をsys.pathに直接適用することもできます。


0

Pythonは、エラーメッセージが表示されたときに、その場所を教えてくれます:)

>>> import os
>>> os.environ['PYTHONPATH'].split(os.pathsep)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\martin\AppData\Local\Programs\Python\Python36-32\lib\os.py", line 669, in __getitem__
    raise KeyError(key) from None
KeyError: 'PYTHONPATH'
>>>

-1

これを使って:

import sys
print(sys.executable)

または、cmdの1行:

python -c "import sys; print(sys.executable)"

1
質問の作成者が、実際のpython実行可能ファイルへのパスではなく、pythonディレクトリのリストを要求しているようです。
Sergey Shubin
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.