2013-04-19 13 views
68

特定のディレクトリからモジュールをインポートしようとしています。sys.path/PYTHONPATHにディレクトリを追加する

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

誰かがなぜこれが起こっているのかを説明し、私にmod_directoryを追加する解決策を与えることができますか? pythonスクリプト?

+0

私は['site'モジュール](https://docs.python.org/3/library/site.html#site.addsitedir)を試しました。 –

答えて

95

これは文書化されているように動作しています。 PYTHONPATHで指定されたパスは、通常は作業ディレクトリの後ろにあるが、標準のインタープリタ提供パスの前にあるものとして文書化されています。 sys.path.append()は既存のパスに追加されます。 hereおよびhereを参照してください。あなたが特定のディレクトリが最初に来てほしい場合は、単にのsys.pathの先頭にそれを挿入します。

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

言った、PYTHONPATHを使用して、または直接sys.path操作のいずれかより輸入を管理するためのより良い方法があるのが普通です。たとえば、this questionの回答を参照してください。

あなたが使用することができ
+0

返事をありがとう。問題は、.eggファイルとしてパッケージ化されたモジュールを追加するには、Python 2.6のディレクトリの代わりにファイル名を含めることを認識していなかったことです。 – UnadulteratedImagination

+1

Hey man、これは私のdjangoを破ったものです。人々にそれを上に置くように言うことを意味していますか? –

+12

@RClaven、申し訳ありませんが、あなたが言及しているアクションと結果を伝えるのは難しいです:「トップに置く」と「私のジャンゴを壊しました」はあまり正確ではありません。あなたは精緻化できますか? –

1

import os 
path = 'the path you want' 
os.environ['PATH'] += ':'+path 
1

一時のdirsを変更するとインポートに適しています:

WindowsでのPowershellからPythonスクリプトを実行している場合、これは動作するはず
cwd = os.getcwd() 
os.chdir(<module_path>) 
import <module> 
os.chdir(cwd) 
0

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

# Now run the actual script 
python your_script.py 
関連する問題