ソースディレクトリにいる間にモジュールfoo
をインポートしようとすると、ややややこしいImportError
メッセージが表示されます:ImportError: No module named foo
。
このケースを簡単にキャッチして、より有益なメッセージを返すにはどうすればよいですか? 「ソースディレクトリからモジュールfooをロードしないでください」?
__init__.py
、私はで始まる:
try:
from _foo import *
except ImportError:
## check whether in the source directory...
したがって、ImportError
のさまざまな原因を区別し(たとえば、foo
という名前のモジュールがまったくインストールされていないため)、setup.py
は現在のディレクトリにあります。これを行うエレガントな方法は何でしょうか?
ImportError: No module named foo
は、実際にはモジュールfoo.py
またはパッケージfoo/__init__.py
が検索パス(sys.path
リスト)のどのディレクトリにも見つからなかったことを意味します。
sys.path
には通常.
(現在のディレクトリ)が含まれているため、これはおそらくソースディレクトリにあるの意味です。パッケージfoo
(__init__.py
ファイルがある)の最上位ディレクトリにいるので、明らかにfoo/__init__.py
が見つかりません。
最後に、多かれ少なかれあなた自身の質問に答えました。
try:
from _foo import *
except ImportError:
raise ImportError('<any message you want here>')
または、sys.path
の内容、現在のディレクトリ、および既知の場合は予想されるパッケージディレクトリを確認し、さらに詳細でコンテキスト認識メッセージを生成できます。
または、..
をPYTHONPATH
環境変数(UNIXの場合)に追加して、ソースディレクトリから実行できるようにします。 Windowsでも動作するかもしれませんが、知りません。