コードのどこかでImportError
例外が発生しますが、アプリケーションの起動時に同じモジュールを安全にインポートできます。どのパスPythonがインポートするモジュールを探すのかを知りたいので、この問題が発生する理由を追跡できます。これを見つけました。
print sys.path
これは、システムがモジュールをインポートしようとしたときに見えるすべてのパスのリストですか?
pythonデフォルトでチェックするパスの場所は、 sys.path
。
import sys
print(sys.path)
より良いフォーマットが必要な場合:
import sys
from pprint import pprint
pprint(sys.path)
他の答えはほぼ正解です
Python 3:
_import sys
import_paths = sys.path
_
In Python 2.7:
_import sys
import os
import copy
import_paths = copy.copy(sys.path)
if '__file__' in vars(): import_paths.append(os.path.abspath(os.path.join(__file__,'..')))
_
どちらのバージョンでも、メインファイル(つまり___== '__main'
_はTrue
)は、sys.pathに独自のディレクトリを自動的に追加します。 ただし Python 3は_sys.path
_からモジュールをインポートするだけです。Python 2.7は_sys.path
_現在のファイルのディレクトリから:これは、次のようなファイル構造がある場合に関連します。
_|-- start.py
|-- first_import
| |-- __init__.py
| |-- second_import.py
_
コンテンツ付き
start.py:
_import first_import
_
__ init__.py:
_import second_import.py
_
Python 3直接__init__.pyを実行すると動作しますが、start.pyを実行すると、__ init__.pyは_import second_import.py
_にならないため__sys.path
_になりません。 。
Python 2.7でstart.pyを実行すると、__ init__.pyは_import second_import.py
_にありますが、_sys.path
_と同じフォルダーにあるため) 。
perfectly duplicate Python 2.7の動作をPython 3にすることはできません。
_Sys.path
_は、インポートを見つけるときにPythonが検索するすべてのパスのリストです。 1つ以上のpythonファイルを含むディレクトリに別のパスを追加する場合は、sys.path.append('path/to/directory')
を使用できます。