web-dev-qa-db-ja.com

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

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

問題は、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を直接操作する方法のどちらよりも、通常は優れた方法があります。たとえば、 この質問 に対する答えを参照してください。

137
Ned Deily

あなたが使用することができます:

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

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

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

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

しかし、私がpycharmを使うとき、その道はまだありません。

そのため、run - > edit ConfigurationでPYTHONPATH変数にパスを追加できます。

enter image description here

4
Jayhello

一時的にディレクトリを変更すると、インポートに適しています。

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

Windows上でPowershellからPythonスクリプトを実行するとき、これはうまくいくはずです:

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

# Now run the actual script
python your_script.py
0
Alexander Pacha