簡體   English   中英

在這種情況下,Python 3不需要__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.pyb.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.

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