我已经编写了一些python脚本,现在我想将它们打包到一个模块中。我们的想法是创建一些文件夹来更好地组织它们
结构是这样的
mylib
__init__.py
area1
__init__.py
group11.py
area2
__init__.py
group12.py
__init__.py
文件只包含__all__
变量。顶层是__all__ = ["area1", "area2"]
,其他的是这样的__all__ = ["group11"]
假设group11.py
包含我想要调用的函数def test():
一旦我安装了我的软件包,我有以下结果
import mylib # --> ok
mylib.area1.group11.test() # --> module 'mylib' has no attribute 'area1'
import mylib.area1.group # --> ok
mylib.area1.group11.test() # --> ok
from mylib.area1 import group11 # --> ok
group11.test() # --> ok
为什么第一个解决方案不起作用?我应该在__all__
文件中添加一些内容吗
这完全正常。 您没有在
mylib
包中定义符号area1
,因此出现错误选项1
一种解决方案是从子包中导出所有符号,如下所示:
选项2
另一种方法也使它工作,你至少应该导入你的包中的符号,即
但是,由于您的符号
test
是在mylib.area1.group11
中定义的,您将无法通过仅导入mylib
来访问其中的子包和模块我想说的是,当您执行
import mylib
操作时,您将导入mylib/__init__.py
中定义的符号,而不是子包或子模块。你也得把它们进口警告:如果要从
mylib/area1/group11.py
导出/定义符号,则必须在mylib/area1/__init__.py
和mylib/area2/__init__.py
中执行相同的操作有关详细信息:
相关问题 更多 >
编程相关推荐