0

この場合、Python が例外をスローする理由がわかりません。パッケージ名と同じプレフィックスを持つファイルがあるときに、グローバルにインストールされたパッケージからインポートしようとしました。私は何が欠けていますか?

$ touch fabric.py
$ python2
...
>>> from fabric.api import run
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named api
4

2 に答える 2

0

Python ドキュメントから:

この名前は、インポート検索のさまざまな段階で使用され、サブモジュールへのドット パス (例: foo.bar.baz) である場合があります。この場合、Python は最初に foo、次に foo.bar、最後に foo.bar.baz をインポートしようとします。中間インポートのいずれかが失敗すると、ModuleNotFoundError が発生します。

したがって、ファイルを見つけるため、最初のimport fabric.apiロードを試みてfabric.py成功しfabric.pyます。次に、ロードapiしたばかりのものをロードしようとしますが、うまくいきません。

したがって、グローバルパッケージfabric.pyをシャドーイングしています。fabric

詳細はこちら: http://docs.python.org/dev/reference/import.html

于 2013-06-28T09:21:24.547 に答える