将模块转换为包时出错

Joe*_*vin 1 python packages

我有一个带有许多简单帮助函数的模块,但维护起来却变得庞大而繁琐.我想把它分成一个简单的包.我的包目录在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文件的维护含义.分享的经验或最佳实践?谢谢.

let*_*utx 5

你也应该import ab从包中,以便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文件中指定.其他人可以在必要时进口.不应该有任何性能问题,即使你导入为找到它们被初始化一次模块多次在这里.