特定のディレクトリからモジュールをインポートしようとしています。
問題は、sys.path.append(mod_directory)
を使用してパスを追加してからPythonインタプリタを開くと、ディレクトリmod_directory
がリストsys.pathの末尾に追加されることです。 Pythonインタプリタを開く前にPYTHONPATH
変数をエクスポートすると、ディレクトリがリストの先頭に追加されます。後者の場合はモジュールをインポートできますが、前者の場合はインポートできません。
誰かがこれがなぜ起こっているのか説明して、始めにmod_directory
を追加するための解決策を与えてもらえますか--- inside pythonスクリプト?
これは文書化されているとおりに機能しています。 PYTHONPATH
で指定されたパスは、通常、作業ディレクトリの後で、標準のインタプリタが提供するパスの前に来るものとして文書化されています。 sys.path.append()
は既存のパスに追加します。 ここ および ここ を参照してください。特定のディレクトリを最初にしたい場合は、単にそれをsys.pathの先頭に挿入します。
import sys
sys.path.insert(0,'/path/to/mod_directory')
そうは言っても、インポートを管理するには、PYTHONPATH
を使用する方法とsys.path
を直接操作する方法のどちらよりも、通常は優れた方法があります。たとえば、 この質問 に対する答えを参照してください。
あなたが使用することができます:
import os
path = 'the path you want'
os.environ['PATH'] += ':'+path
一時的にディレクトリを変更すると、インポートに適しています。
cwd = os.getcwd()
os.chdir(<module_path>)
import <module>
os.chdir(cwd)
Windows上でPowershellからPythonスクリプトを実行するとき、これはうまくいくはずです:
$pathToSourceRoot = "C:/Users/Steve/YourCode"
$env:PYTHONPATH = "$($pathToSourceRoot);$($pathToSourceRoot)/subdirs_if_required"
# Now run the actual script
python your_script.py