1

次のような単純なディレクトリ構造を持っています。

MyProject
--main.py
--lib #that's a directory/package
----__init__.py
----view.py
----common_lib.py
----other irrelevant modules...

main.py で:

from lib import view

次のエラーが発生します。

ImportError: cannot import name view

代わりに、次のように書きます。

from lib.view import *

このインポートは成功しますが、view.py で次の失敗が発生します。

from common_lib import Comments, Locations, ScreenData, ProgressSignal

原因:

ImportError: No module named 'common_lib'

また、ディレクトリ構造からわかるように、common_lib.py は view.py と同じディレクトリにありますが、なぜ見つからないのでしょうか? 「from x import y」が機能せず、「from xy import *」が機能するのはなぜですか? ' __init__.py' は完全に空です。そして、私はPython 3.3 32ビットを使用しています。

さらに厄介なのは、この同じプログラムが 2 日前に機能していたことです。IDLE でいくつかのコードをテストしていて、コードをプロジェクトに含める準備ができていると思ったときに、それを PyDev に貼り付けたところ、このエラーにショックを受けました。ディレクトリやモジュールについては何も変更しませんでした。

また、さらに奇妙なことに、view.py と common_lib.py をスタンドアロンとして (インポートせずに) 実行すると、問題なく動作します。問題が実際に存在する場合は、エラーが発生するはずです。

ありがとう。どんなアドバイスでも大歓迎です。

4

3 に答える 3

2

main.pyはまだ最上位にあるため、次を使用する必要がありますlib.common_lib

from lib.common_lib import Comments, Locations, ScreenData, ProgressSignal

前の行from lib import viewは内部からモジュールの検索を開始しないためlibです。

于 2013-06-17T02:31:39.437 に答える
2

与えられた:

+--main.py     # from lib import view
+--lib
   +--__init__.py
   +--common_lib.py # Comments, etc.
   +--view.py       # from .common_lib import Comments, etc.

これは機能します:

from lib import view

これは、同じパッケージ内にあることをview.py示す相対インポートから機能します。common_lib

from .common_lib import Comments, Locations, ScreenData, ProgressSignal
于 2013-06-17T02:44:24.493 に答える