簡體   English   中英

在Py3而不是Py2上嵌套了“ ImportError”

[英]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.pyimport .subpackage ,但是如果我改為import .subpackageimport .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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM