在 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 或函数或变量。
现在因为上面的阅读,我对一个数字有疑问:
当我写 import dirA.dirB 时,这个语句是导入 dirC 包内的模块还是只导入 dirB 包内的模块?
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
而不必记住哪个文件定义了 Foo
和 Bar
。
当你执行 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
访问它。
场景:
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 或函数或变量。
现在因为上面的阅读,我对一个数字有疑问:
当我写 import dirA.dirB 时,这个语句是导入 dirC 包内的模块还是只导入 dirB 包内的模块?
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
而不必记住哪个文件定义了 Foo
和 Bar
。
当你执行 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
访问它。