私は、かなり大規模な既存のコード ベースを持つプロジェクトに参加したばかりです。Linux で開発しており、IDE は使用していません。コマンド ラインで実行しています。プロジェクト モジュールを実行するときに、Python で正しいパスを検索する方法を見つけようとしています。たとえば、次のようなものを実行するとします。
python someprojectfile.py
私は
ImportError: no module named core.'somemodule'
すべてのインポートでこのエラーが発生するので、パスの問題だと思われます。
インポート ステートメント中にPython~/codez/project/
ですべてのファイルとフォルダーを検索するにはどうすればよいですか?*.py
ベストアンサー1
これを行うにはいくつかの方法があります:
PYTHONPATH
インポートされたモジュールを検索するディレクトリのコロンで区切られたリストを環境変数に設定します。- プログラムでは、
sys.path.append('/path/to/search')
インポートされたモジュールを Python で検索するディレクトリの名前を追加するには を使用します。sys.path
は、Python がモジュールのインポートを要求されるたびに検索するディレクトリのリストであり、必要に応じて変更できます (ただし、標準ディレクトリを削除することはお勧めしません)。環境変数に指定したディレクトリは、Python の起動時にPYTHONPATH
挿入されます。sys.path
- 使用
site.addsitedir
を使用して、ディレクトリを に追加しますsys.path
。 と単なる追加との違いは、 を使用するとaddsitedir
、そのディレクトリ内のファイルも検索され.pth
、ファイルの内容に基づいて に追加のディレクトリが追加される可能性があることですsys.path
。詳細については、ドキュメントを参照してください。
どちらを使用するかは、状況によって異なります。プロジェクトを他のユーザーに配布する場合、通常、Python のインポーターによって Python コード ファイルが自動的に検出されるような方法でインストールされることに注意してください (つまり、パッケージは通常ディレクトリにインストールされますsite-packages
)。そのため、コードを変更すると、その変更は不要になる可能性があり、別のコンピューターでコードを実行するときに悪影響を与える可能性があります。開発の場合、通常はこの設定が最善の方法であるとsys.path
推測します。PYTHONPATH
しかし、自分のコンピュータでのみ動作するもの(または非標準の設定、例えばWebアプリフレームワークなど)を使用している場合、次のようなことをすることは珍しくありません。
import sys
from os.path import dirname
sys.path.append(dirname(__file__))