![](/img/trans.png)
[英]Python import statement doesn't work depending on position in __init__.py
[英]Python 3 doesn't need __init__.py in this situation?
假設我有:
src/
__init__.py
a.py
b.py
假設__init__.py
是一個空文件,而a.py
只是一行:
TESTVALUE = 5
假設b.py
是:
from src import a
print(a.TESTVALUE)
現在在Python 2.7和Python 3.x中,運行b.py
給出結果( 5
)。
但是,如果我刪除文件__init__.py
. b.py
, b.py
仍然可以在Python 3.x中運行,但在Python 2.7中,我收到錯誤:
Traceback (most recent call last):
File "b.py", line 5, in <module>
from src import a
ImportError: No module named src
為什么Python 2.7在這種情況下表現出不同的行為?
Python 3支持在沒有__init__.py
文件的情況下工作的命名空間包 。 此外,這些包可以分布在多個目錄中。 這意味着sys.path
中包含*.py
文件的所有目錄都將被識別為包。
這就打破了Python 3在導入方面的向后兼容性。 一個典型的問題是當前工作目錄中的目錄,其名稱類似於numpy
等庫,並且包含Python文件。 雖然Python 2忽略了這個目錄,但Python 3會首先找到它並嘗試從那里導入庫。 這幾次咬了我一下。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.