在Python中导入包

时间:2015-08-17 17:42:17

标签: python python-import

情景:

dirA/
   __init__.py
   file1.py
   file2.py
   dirB/
       __init__.py
       file11.py
       file22.py
       dirC/
           __init__.py
           file111.py
           file222.py

我在https://docs.python.org/2/tutorial/modules.html#tut-standardmodules上读到,相反,在使用import item.subitem.subsubitem之类的语法时,除了最后一项之外的每个项都必须是一个包;最后一项可以是模块或包,但不能是上一项中定义的类或函数或变量。

现在由于上面的阅读,我有一些疑问:

  1. 当我写import dirA.dirB时,这个语句是否也在dirC包中导入模块,或者只导入dirB中的模块?

  2. import dirA.dirB 的用途是什么,因为当我使用此语句时,仍然无法使用dirB子包内的模块

  3. 我知道要使用dirB中的模块我必须使用 import dirA.dirB.file11

2 个答案:

答案 0 :(得分:1)

当您执行import dirA.dirB时,您只导入包dirB,这意味着您基本上导入__init__.py下的dirB.py,如果__init__.py正在定义某些函数或类等,您可以在导入dirA.dirB之后使用它们。

示例 -

我的目录结构 -

共享/     a.py     包装/         的初始化的.py         b.py

现在在pkg/__init__.py,我有 -

x = 1
import pkg.b

我的pkg/b.py是 -

a = 1

现在在a.py,我可以做 -

import pkg
print(pkg.b.a)
print(pkg.x)

这样可行,因为__init__.py已导入pkg.b,因此可以使用pkg.b.a访问它。

答案 1 :(得分:0)

当您使用from dirA import dirB时,dirB将是一个模块,其中包含dirB/__init__.py中定义或导入的任何内容(变量,函数等)。

这通常用于制作" public" dirB的组件易于访问。例如,您可能有:

from .file11 import Foo
from .file22 import Bar

因此,您图书馆的用户只需致电:

from dirA.dirB import Foo, Bar

而不必记住哪个文件定义FooBar