在 Python 中导入包

Importing package in Python

场景:

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 这样的语法时,除了最后一项之外的每个项目都必须是一个包;最后一项可以是模块或包,但不能是前一项中定义的 class 或函数或变量。

现在因为上面的阅读,我对一个数字有疑问:

  1. 当我写 import dirA.dirB 时,这个语句是导入 dirC 包内的模块还是只导入 dirB 包内的模块?

  2. import dirA.dirB有什么用,因为我在使用这个语句的时候,我仍然无法使用 dirB 子包中的模块?

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

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

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

from .file11 import Foo
from .file22 import Bar

这样您图书馆的用户就可以简单地调用:

from dirA.dirB import Foo, Bar

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

当你执行 import dirA.dirB 时,你只导入包 dirB ,这意味着你基本上导入 dirB.py 下的 __init__.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 访问它。