我在嘗試導入破碎包兩次時發現了一個奇怪的行爲。讓我們考慮下面的包:嘗試導入破損包兩次時出現錯誤導入錯誤
| package
|--| __init__.py
|--| module1.py
與module1.py
空__init__.py
包含:
from package import module1
from package import module2
第一次嘗試導入package
,一個ImportError
上升,因爲module2
丟失:
>>> import package
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/tmp/package/__init__.py", line 2, in <module>
from package import module2
ImportError: cannot import name 'module2'
但第二次嘗試,ImportError
抱怨module1
:
>>> import package
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/tmp/package/__init__.py", line 1, in <module>
from package import module1
ImportError: cannot import name 'module1'
即使module1
之前已成功導入。它甚至可以在sys.modules
:
>>> import sys
>>> sys.modules["package.module1"]
<module 'package.module1' from '/tmp/package/module1.py'>
然而,這似乎是固定在Python 3.5,也許是因爲circular imports involving relative imports are now supported。
究竟發生了什麼?