sys.path / PYTHONPATHにディレクトリを追加する


130

特定のディレクトリからモジュールをインポートしようとしています。

問題はsys.path.append(mod_directory)、パスを追加してpythonインタープリターを開くと、ディレクトリmod_directoryがリストsys.pathの最後に追加されることです。PYTHONPATHPythonインタープリターを開く前に変数をエクスポートすると、ディレクトリがリストの先頭に追加されます。後者の場合はモジュールをインポートできますが、前者の場合はインポートできません。

なぜこれが起こっているのか誰かが説明し、Pythonスクリプト内でをmod_directory最初に追加する解決策を教えてくれませんか?


私はsiteモジュールを試しました。
Zeinab Abbasimazar 2017

回答:


178

これはドキュメントどおりに機能しています。で指定されたパスはすべてPYTHONPATH、通常は作業ディレクトリの後で、標準のインタープリターが提供するパスの前に来ると記載されています。 sys.path.append()既存のパスに追加します。こちらこちらをご覧ください。特定のディレクトリを最初にしたい場合は、単にsys.pathの先頭にそれを挿入します。

import sys
sys.path.insert(0,'/path/to/mod_directory')

とは言っても、直接使用するPYTHONPATHsys.path直接操作するよりも、インポートを管理する方法が通常は優れています。たとえば、この質問に対する回答をご覧ください。


返信いただきありがとうございます。問題は、.eggファイルとしてパッケージ化されたモジュールを追加するには、Python 2.6のディレクトリだけでなく、ファイル名を含める必要があることに気付かなかったことです
UnadulteratedImagination

2
おいおい、これは私のジャンゴを壊した。それを一番上に置くように言うつもりですか?!?!!?
R Claven、2014年

16
@RClaven、申し訳ありませんが、どのアクションと結果を参照しているのかを判断するのは困難です。「トップに置く」と「私のジャンゴを壊す」はあまり正確ではありません。詳しく説明できますか?
Ned Deily 2014年

方法の詳細のsys.pathの作品については、この回答を参照stackoverflow.com/a/38403654/850326
djhaskin987

2
「0」ではなく「1」を使用する必要があります。そうでなければ、sys.pathを壊しますstackoverflow.com/q/10095037/125507も参照してください。
kadee 2018


6

私に関しては、自分のpythonパスにカフェインする必要があります。addでファイルへのパスを/home/xy/.bashrc追加できます

export PYTHONPATH=/home/xy/caffe-master/python:$PYTHONPATH

私の/home/xy/.bashrcファイルに。

しかし、私がpycharmを使用するとき、パスはまだありません。

したがってPYTHONPATH、実行->構成の編集により、変数へのパスを追加できます。

ここに画像の説明を入力してください


最も簡単なのが最良の答えです。これを開発用に追加すると、オートコンプリートが機能します
Gang

上記のように.bashrcを更新しましたが、jupyterノートブックには反映されませんでした。Jupyterノートブックにはまだモジュールが見つからないと表示されています。
Athar

3

一時的に変更するディレクトリはインポートに適しています:

cwd = os.getcwd()
os.chdir(<module_path>)
import <module>
os.chdir(cwd)

0

WindowsでPowershellからPythonスクリプトを実行する場合、これは機能するはずです。

$pathToSourceRoot = "C:/Users/Steve/YourCode"
$env:PYTHONPATH = "$($pathToSourceRoot);$($pathToSourceRoot)/subdirs_if_required"

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