如何设置模块导入以便每个模块都可以访问所有其他模块的对象?
我有一个中等大小的 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/