在Python中导入包
情景:在Python中导入包,python,python-import,Python,Python Import,情景: dirA/ __init__.py file1.py file2.py dirB/ __init__.py file11.py file22.py dirC/ __init__.py file111.py file222.py 我读到的是相反的,当使用像import item.subitem.subsubsubitem这样的语法时,除了最后一
dirA/
__init__.py
file1.py
file2.py
dirB/
__init__.py
file11.py
file22.py
dirC/
__init__.py
file111.py
file222.py
我读到的是相反的,当使用像import item.subitem.subsubsubitem这样的语法时,除了最后一个之外的每个项目都必须是一个包;最后一项可以是模块或包,但不能是前一项中定义的类、函数或变量。
现在,由于上述阅读,我有一个疑问:
我知道要使用dirB中的模块,我必须使用导入dirA.dirB.file11当您使用dirA导入dirB中的
时,dirB
将是一个包含dirB/\uu init\uuuuu.py
中定义或导入的任何内容(变量、函数等)的模块
这通常用于使dirB
的“公共”组件易于访问。例如,您可能有:
from .file11 import Foo
from .file22 import Bar
这样,您的库的用户就可以简单地调用:
from dirA.dirB import Foo, Bar
当您导入dirA.dirB
时,不必记住哪个文件定义了Foo
和Bar,您只需导入包dirB
,这意味着您基本上导入了dirB.py
下的\uu init\uuuuuuuuuupy
,如果\uuuu init\uuuuu.py
正在定义一些函数或类等,那么您可以在导入dirA.dirB
后使用它们
范例-
我的目录结构-
共享/
a、 派克
包装/
init.py
b、 派克
现在在pkg/\uuuu init\uuuu.py
中,我有-
x = 1
import pkg.b
我的pkg/b.py
是-
a = 1
现在在a.py
中,我可以-
import pkg
print(pkg.b.a)
print(pkg.x)
这是可行的,因为\uuuu init\uuuuuuuuuupy
导入了pkg.b
,因此可以使用pkg.b.a
访问它,如果pkg/\uuuuu init\uuuuuuuuuupy中没有写入任何内容,那么在a.py中写入import pkg时会将哪些内容加载到内存中?什么都没有。只有pkg
的模块对象,但您将无法对其执行任何操作。好的,这是否意味着只有在init.py中编写了代码时,导入子包才有意义?不,您可以简单地导入子包,如import pkg.b
直接在a.py
中导入。但是要将pkg
识别为一个包,您需要pkg
文件夹中的\uuuu init\uuuuuuuuuy.py
。导入pkg.b将加载模块b,这不是问题所在。我对子包有意见,我的意思是包中肯定会有一个init.py文件,但是如果我们没有在这个文件中写任何东西,并且只导入这个包,比如导入packagename,那么它就没有任何意义,因为我们没有在init.py文件中写任何东西。谢谢David Wollever。