一個包直接導入不自動把子包或子到它的命名空間:
>>> import mydir
>>> dir(mydir)
['__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__']
(注意,沒有innerdir
在這裏。)
但是,如果導入通過一個Python將命名空間連接在一起:
>>> import mydir.innerdir
>>> dir(mydir)
['__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', 'innerdir']
>>> dir(mydir.innerdir)
['__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__']
(請注意,沒有mymodule
在mydir.innerdir
)
Python允許你明確地說什麼一些子模塊中使用__all__
魔術變量在__init__.py
包自動包括,但默認情況下它只是運行代碼__init__.py
代碼,而不是做別的事。
你可以做任何以下的:
import mydir.innerdir.mymodule; mydir.innerdir.mymodule.hi()
from mydir.innerdir import mymodule; mymodule.hi()
from mydir.innerdir.mymodule import hi; hi()
或者,您可以編輯__init__.py
文件,包括__all__
瓦爾通配符進口。
# file mydir/innerdir/__init__.py
print 'Running mydir/innerdir/__init__.py'
__all__ = ['mymodule']
然後,你可以做這樣的東西:
from mydir.innerdir import *; mymodule.hi()
甚至更瘋狂的,你可以急切地進口的子包和模塊(我不建議這樣做!):
# file mydir/__init__.py
print 'Running mydir/__init__.py'
import innerdir
# file mydir/innerdir/__init__.py
print 'Running mydir/innerdir/__init__.py'
import mymodule
現在這些將起作用:
import mydir; mydir.innerdir.mymodule.hi()
from mydir import innerdir; innerdir.mymodule.hi()
你可能想要刷新一下documentation for packages,它解釋了所有這些,並且具有與你在這裏顯示的完全一樣的目錄結構。
你應該可以'從mydir import innerdir'現在你不必使用整個路徑 – dm03514 2013-04-03 23:25:21
你看了[Packages](http://docs.python.org/2/tutorial/modules.html #packages)在教程中?它解釋了我想你所問的幾乎所有問題。 – abarnert 2013-04-03 23:28:53
@abarnert我真的讀過它,但我並不理解整個概念,我只是迷失了 – whatyouhide 2013-04-03 23:35:29