[英]Nested `ImportError` on Py3 but not on Py2
我在理解嵌套導入如何在python項目中工作時遇到了麻煩。 例如:
test.py
package/
__init__.py
package.py
subpackage/
__init__.py
test.py
:
import package
package/__init__.py
:
from .package import functionA
package/package.py
:
import subpackage
def functionA():
pass
在Python 3.5中運行test.py
時,出現以下錯誤,但在Python 2.7中沒有錯誤:
C:\Users\Patrick\Anaconda3\python.exe C:/Users/Patrick/Desktop/importtest/test.py
Traceback (most recent call last):
File "C:/Users/Patrick/Desktop/importtest/test.py", line 1, in <module>
import package
File "C:\Users\Patrick\Desktop\importtest\package\__init__.py", line 1, in <module>
from .package import functionA
File "C:\Users\Patrick\Desktop\importtest\package\package.py", line 1, in <module>
import subpackage
ImportError: No module named 'subpackage'
但是,如果我使用Python 3.5運行package.py
。 我完全沒有錯誤。
這對我來說很奇怪,因為當package.py
運行時,行import subpackage
可以工作,但是通過嵌套導入(同一行)正在“運行”(不知道這里是否是正確的術語)找不到subpackage
。
為什么在這種情況下Python 2.7和3.5之間存在差異,並且如何以適用於2.7.x和3.x的方式解決此差異?
我認為這可能是由於嵌套導入中的import subpackage
被視為嵌套導入中的隱式相對導入,而不是直接運行package.py
時import .subpackage
,但是如果我改為import .subpackage
, import .subpackage
收到此錯誤2.7和3.5:
C:\Users\Patrick\Anaconda3\python.exe C:/Users/Patrick/Desktop/importtest/test.py
Traceback (most recent call last):
File "C:/Users/Patrick/Desktop/importtest/test.py", line 1, in <module>
import package
File "C:\Users\Patrick\Desktop\importtest\package\__init__.py", line 1, in <module>
from .package import functionA
File "C:\Users\Patrick\Desktop\importtest\package\package.py", line 1
import .subpackage
^
SyntaxError: invalid syntax
您應該使用:
from . import subpackage
在package/package.py
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.