正确导入Python中的模块
问题描述
如何设置模块导入,以便每个模块可以访问所有其他模块的对象?
我有一个中等大小的Python应用程序,模块文件位于不同的子目录中。我已经创建了将这些子目录附加到sys.path
的模块,并使用import thisModule as tm
导入了一组模块。使用该限定来引用模块对象。然后我使用from moduleImports import *
将该模块导入到其他模块中。代码现在是草率的,并且有几个这样的东西,通常是重复的。
首先,应用程序失败,因为一些模块引用未分配。此代码在单元测试时运行。
第二,我担心会导致递归模块导入的问题。导入模块导入导入此模块,它导入模块导入。。。。
执行此操作的正确方法是什么?
解决方案
"我有一个中等大小的应用程序,其模块文件位于不同的子目录中。"
很好。绝对确保每个目录包含一个__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
显式列表。没有魔法。没有动态更改为sys.path
。
我当前的项目有100个模块,十几个包。每个模块都只导入其所需的内容。没有魔法。
相关文章