![](/img/trans.png)
[英]Difference between importing module in Python 3.4 and Python 2.7
[英]Difference in package importing between Python 2.7 and 3.4
對於此目錄層次結構:
.
├── hello
│ ├── __init__.py
│ └── world
│ └── __init__.py
└── test.py
和Python源文件:
if __name__ == '__main__':
import hello
import world
print("yes you win")
使用Python 3.4運行test.py會拋出ImportError
說找不到模塊world
,但是使用Python 2.7一切都很好。
我知道在搜索導入的模塊時會引用sys.path
,因此將目錄hello
添加到sys.path
消除錯誤。
但是在Python 2.7中,在導入world
之前,目錄hello
也不在sys.path
中。 是什么導致這種差異? 是否在Python 2.7中應用了遞歸搜索策略?
Python 3使用絕對導入(參見PEP 328 ,@ user2357112指出)。 缺點是Python 3從每個sys.path
條目的根目錄進行搜索,而不是首先查詢模塊的目錄,就好像它是sys.path
中的前置條目一樣。
要獲得您想要的行為,您可以:
from . import world
在hello
包中from . import world
import hello.world
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.