将模块转换为程序包时出错

2024-04-24 02:41:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个带有许多简单助手函数的模块,但是它越来越大,维护起来也越来越繁琐。我想把它分成一个简单的包。我的包目录是在PYTHONPATH上定义的,如下所示:

test
|--__init__.py          <---this is empty
|--a.py
|--b.py

这是以通常的方式导入的(导入测试),但是在检查时(dir(测试)),库不包含模块a或b,只包含一些顶级属性。我可以用一个提示来说明出了什么问题。谢谢!你知道吗

下面的解决方案:init文件现在自动加载我每次都要访问的模块。这尊重python3.4固有的绝对路径假设。你知道吗

from .a import a
from .b import b

跟进: 我的意图是将每个helper脚本作为自己的模块,从而产生许多易于查找和维护的小模块。这是惯用语吗?效率低下?我得到了init文件的维护含义。有什么经验或最佳实践可以分享吗?谢谢。你知道吗


Tags: 模块文件函数frompytestimport目录
2条回答

您还应该从包中import ab,以便dir列出它们。如果要在导入包时自动导入包中的模块,请在__init__.py中指定,方法是添加要在__init__.py中导入的模块的import语句

test           # package directory
├── module1.py
├── module2.py
├── __init__.py

要在导入包时导入module1,您__init__.py必须包含以下内容。你知道吗

import module1

您可以使用from test import module2test包导入模块

编辑:

只要不同的模块服务于不同的目的,最好将所有相关的助手都保留在自己的模块中。在导入包时,默认情况下要导入的所有模块都应该在__init__.py文件中指定。其他的可以随时进口。即使您多次导入一个模块,也不应该有任何性能影响—它们只在找到here时初始化一次。你知道吗

我认为最简单的答案是像这样导入所需的模块:

import test.a
import test.b as b  # variant if you don't want the package name

然后可以调用模块中的函数:

test.a.foo()
b.bar()

相关问题 更多 >