我有一个带有许多简单帮助函数的模块,但维护起来却变得庞大而繁琐.我想把它分成一个简单的包.我的包目录在PYTHONPATH上定义,如下所示:
test
|--__init__.py <---this is empty
|--a.py
|--b.py
Run Code Online (Sandbox Code Playgroud)
这是以通常的方式导入(导入测试)但是在检查(dir(测试))时,库不包含模块a或b,只包含一些顶级属性.我可以用一个暗示出了什么问题.谢谢!
解决方案如下: init文件现在自动加载我想要访问的模块.这尊重Python 3.4固有的绝对路径假设.
from .a import a
from .b import b
Run Code Online (Sandbox Code Playgroud)
后续行动: 我的目的是将每个帮助程序脚本作为自己的模块,从而导致许多小模块易于查找和维护.这是惯用的吗?效率低下?我得到了对init文件的维护含义.分享的经验或最佳实践?谢谢.
你也应该import a和b从包中,以便dir一一列举.如果要在导入包时自动导入包__init__.py中的模块,请通过添加要导入的模块的import语句来指定__init__.py
test # package directory
??? module1.py
??? module2.py
??? __init__.py
Run Code Online (Sandbox Code Playgroud)
要在导入包时导入module1,__init__.py必须包含以下内容.
import module1
Run Code Online (Sandbox Code Playgroud)
您可以从test包中导入模块from test import module2
编辑:
只要不同的模块用于不同的目的,最好将所有相关的帮助器保存在自己的模块中.导入软件包时,默认情况下要导入的所有模块都应在__init__.py文件中指定.其他人可以在必要时进口.不应该有任何性能问题,即使你导入为找到它们被初始化一次模块多次在这里.