私は3つのプロジェクトをPyDevに設定しており、それらはすべてプロジェクト参照リストにお互いを持っています。例示の目的のために:レタスを使った円形地雷の埋め込み
proj_f
pack_foo
mod_fooa (contains class Fooa)
mod_foob (contains class Foob)
mod_faa (contains class Faa)
pack_fii
mod_fiia (contains class Fiia)
mod_fiib (contains class Fiib)
proj_b
mod_bar (contains function func_bar)
pack_baz
mod_baza (contains class Baza)
mod_bazb (contains class Bazb)
proj_t
tester (what I'm running from)
例のために、再び、テスター:
from pack_foo.mod_fooa import Fooa
from pack_fii.mod_fiia import Fiia
from mod_bar import func_bar
func_bar(Fooa(), Fiia())
とmod_bar:
from pack_foo.mod_fooa import Fooa
from pack_fii.mod_fiia import Fiia
def func_bar(fooa, fiia):
if not fooa:
fooa = Fooa()
if not fiia:
fiia = Fiia()
fooa.do_magic()
fiia.do_magic()
私は何を見ていると、fooのからいくつかの輸入が取得することであるImportError: cannot import name
私がテスターからそれらを呼び出すと、mod_barで(重要ではなく、すべてではないが)。私がちょうどmod_barを実行した場合、インポートは正常に動作します。mod_barから依存関係とインポートを削除してテスターから実行すると、正常に動作します。クラスのサブセットがf inからbとtの両方にインポートされ、tがtから実行される場合にのみ壊れます。私は、インポートの仕組みやソリューションについてのグーグルについてドキュメントを読んでみましたが、正しい方向に私を指摘しているものは見つかりませんでした。私はこれがPython内部のいくつかの不明瞭な部分と関係があると感じていますが、それが何であるかを知るのに十分なものではありません。
私は、これは正確にmod_bar
へtester
からの参照が間接的であることを伴う複雑さの追加層は、(私は仕事としてtester
が、私は私のコードで周りのサルに使用するファイルでありますが、何が起こっているかを表していると思いますそれはmod_bar
が実際にはレタス地形ファイルであり、レタスはtester
が呼んでいるいくつかの他のモジュールによって読み込まれています。誰もこの問題を回避する方法の情報を探し始めるには、少なくともいくつかの場所を私に提供できますか?
編集:
私は特に、スタックトレース、いくつかのより多くの本を見ていた:
Traceback (most recent call last):
File "C:\Python27\Lib\site-packages\lettuce\__init__.py", line 53, in <module>
terrain = fs.FileSystem._import("terrain")
File "C:\Python27\Lib\site-packages\lettuce\fs.py", line 74, in _import
module = imp.load_module(name, fp, pathname, description)
File "C:\Users\adminsetup\workspace\nytd_lettuce_lib\terrain.py", line 6, in <module>
from session.session import Session
ImportError: cannot import name Session
lettuce.__init__()
でterrain = fs.FileSystem._import("terrain")
は私にこれらの頭痛を与えている円形の輸入を引き起こしていませんか?