簡體   English   中英

python:帶有“嵌套”模塊的導入包

[英]python : imported packages with 'nested' modules

當我導入模塊時,這個嵌套場景工作正常。 但是當我嘗試導入包時,我得到了不一致的結果。 這是一個非常簡單的案例:

我當前文件夾的內容:

mypackages <directory>
   __init__.py 
   one.py
   two.py
   three.py

這是腳本:

__init__.py :
import one

one.py :
import two

two.py :
import three

我期待我應該能夠通過這種方式訪問兩個三個

import mypackages
mypackages.one.two
mypackages.one.two.three

或者換句話說,邏輯級別應該是這樣的:

one
  two
    three

但是當我導入 mypackages 時,我將所有模塊都暴露在同一級別:

>>> import mypackages
>>> print dir(mypackages)
['__builtins__', '__doc__', '__file__', '__name__', '__package__', 
'__path__', 'one', 'three', 'two']

它應該只顯示one模塊,對嗎? 我很困惑為什么它顯示所有one , twothree ,這意味着它們處於同一級別(我可以直接使用mypackages.twomypackages.three )。

有沒有人有任何解釋?

你應該閱讀這個

通過將文件放在同一級別,您將它們放在相同的包級別。 在您的情況下,您需要獲得此架構:

mypackage
├── __init__.py
├── one.py  # contains "import two"
└── two
    ├── __init__.py
    ├── two.py  # contains "import three"
    └── three
        ├── __init__.py
        └── three.py

然后,您可以通過以下方式訪問該包:

import mypackage.one
import mypackage.one.two
import mypackage.one.two.three

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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