一个包直接导入不自动把子包或子到它的命名空间:
>>> 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