1
我正在導入軟件包foo1.foo2
,其中__init__.py
正在導入子模塊foo1.foo2.foo3.bar1
,它是一個文件。如果我嘗試導入該文件我得到以下錯誤內:正在加載軟件包時導入軟件包的子模塊
AttributeError: module 'foo1' has no attribute 'foo2'
鑑於the use of relative imports is discouraged,我怎麼能解決這個問題,而使用相對進口?
這裏是我的包結構和文件內容:
/
├── foo1
│ ├── __init__.py:
│ └── foo2
│ ├── __init__.py: "import foo1.foo2.foo3.bar1"
│ └── foo3
│ ├── __init__.py
│ ├── bar1.py: "import foo1.foo2.foo3.bar2 as bar2"
│ └── bar2.py:
└── main.py: "import foo1.foo2"
運行python main.py
生成以下錯誤:
Traceback (most recent call last):
File "main.py", line 1, in <module>
import foo1.foo2
File "/foo1/foo2/__init__.py", line 1, in <module>
import foo1.foo2.foo3.bar1
File "/foo1/foo2/foo3/bar1.py", line 1, in <module>
import foo1.foo2.foo3.bar2 as bar2
AttributeError: module 'foo1' has no attribute 'foo2
我使用Python 3.6.0 :: Anaconda 4.3.1
。
謝謝!
謝謝你的建議!你能解釋爲什麼會發生這種情況嗎?爲什麼「從......進口......」起作用,「進口......作爲...」不? –
文件foo1.foo2.foo3.bar1不屬於我,我無法更改它。我只是更新foo1.foo2.__init__.py。 –
@ Pro.Hessam其實我不確定。但它似乎在子模塊中的同一文件夾中導入文件,您需要指定範圍。這意味着你需要使用'from。 import bar2'或'from foo1.foo2.foo3 import bar2'。你需要指定模塊'foo3'的範圍,其原因可能與'bar1'有關,'bar2'只是一個文件而不是一個模塊。 – Sraw