python - 在 Python 中正确导入模块

标签 python python-import

如何设置模块导入以便每个模块都可以访问所有其他模块的对象?

我有一个中等大小的 Python 应用程序,其模块文件位于各个子目录中。我创建了将这些子目录附加到 sys.path 的模块,并使用 import thisModule as tm 导入了一组模块。模块对象使用该限定来引用。然后,我使用 from moduleImports import * 将该模块导入到其他模块中。现在的代码很草率,其中有几个这样的东西,通常是重复的。

首先,应用程序失败是因为未分配某些模块引用。相同的代码在单元测试时会运行。

其次,我担心我会导致递归模块导入出现问题。导入 moduleImports 会导入 thisModule,后者会导入 moduleImports。 . . .

正确的做法是什么?

最佳答案

“我有一个中等大小的 Python 应用程序,其模块文件位于各个子目录中。”

很好。绝对确保每个目录都包含一个 __init__.py 文件,这样它就是一个包。

“我创建了将这些子目录附加到 sys.path 的模块”

不好。使用 PYTHONPATH 或安装整个结构 Lib/site-packages。不要动态更新 sys.path。这是一件坏事。难以管理和维护。

“导入一组模块,使用import thisModule as tm。”

没有意义。也许您为结构中的每个模块设置了一个 import thisModule as tm。这是典型的标准做法:只导入您需要的模块,不导入其他模块。

“然后我使用 from moduleImports import * 将该模块导入到其他模块中”

不好。不要一揽子导入一堆随机的东西。

每个模块都应该有一个较长的列表,列出它需要的具体内容。

import this
import that
import package.module

明确的 list 。没有魔法。 sys.path 没有动态变化。

我当前的项目有 100 个模块,十几个包。每个模块只导入它需要的东西。没有魔法。

关于python - 在 Python 中正确导入模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/896112/

相关文章:

python - 导入并运行文件夹中的所有模块

python - 导入 Ansible 模块实用程序

python - 防止导入的模块出现在代码完成中?

Python 2.7 不再工作 : cannot import name md5

python - 如何让被调用的函数使用装饰器进行日志记录?

Python Pandas : read csv with N columns where N is specified in the some other column

python - 仅将几列转为行,同时将其余列保留为列 - python

python - 是否可以导入函数内定义的类?

javascript - 复选框不会选中,但每个复选框都在注册第一次点击并将数据发送到服务器

来自网格的 Python cv2.remap 创建像素化失真