che*_*vik 11 python python-import
如何设置模块导入,以便每个模块可以访问所有其他模块的对象?
我有一个中型Python应用程序,其中包含各种子目录中的模块文件.我创建sys.path了一些模块,使用这些模块将这些子目录附加到并导入一组模块import thisModule as tm.模块对象与该限定条件一起引用.然后我将该模块导入到其他模块中from moduleImports import *.代码现在很草率,并且有几个这些东西,通常是重复的.
首先,应用程序失败,因为未分配某些模块引用.在单元测试时运行相同的代码.
其次,我担心我会导致递归模块导入问题.导入moduleImports导入thisModule,导入moduleImports....
这样做的正确方法是什么?
S.L*_*ott 23
"我有一个中型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
Run Code Online (Sandbox Code Playgroud)
明确的清单.没有魔法.没有动态变化sys.path.
我目前的项目有100个模块,十几个包.每个模块都可以输入所需的内容.没有魔法.
几个指针
您可能已经在各种模块中拆分了功能.如果在大多数情况下正确完成,您将不会陷入循环导入问题(例如,如果模块a依赖于b和b,则可以创建第三个模块c以消除此类循环依赖性).作为最后的手段,在导入b中但在b中导入a需要a的位置,例如内部函数.
一旦功能正确地在模块中将它们分组到子目录下的包中__init__.py并向其添加文件,以便您可以导入包.将这些包装保存在文件夹(例如lib)中,然后添加到sys.path或设置PYTHONPATH env变量
从模块导入*可能不是一个好主意.相反,导入所需的一切.它可能是完全合格的.啰嗦并不痛苦.例如,从pakageA.moduleB导入CoolClass.
| 归档时间: |
|
| 查看次数: |
13781 次 |
| 最近记录: |