Python:为整个包导入模块一次

3
我目前正在编写一个基于以下结构的应用程序:
main.py + Package1 +--- Class1.py +--- Apps + Package2 +--- Class1.py +--- Apps
所以我有两个问题: 首先,在两个包内,所有应用程序都需要使用某些模块,例如re。是否有一种方法可以一次性为整个包导入一个模块,而不是在每个需要它的文件中逐个导入?
其次,正如您所看到的,Class1在两个包中都被使用。是否有一种好的方法可以在两个包之间共享它,以避免代码重复?

第一个问题的简短回答:不。 - Nikolay Baluk
你必须在模块中定义变量,因此必须导入所有所需的模块。另外,请记住其他人可能会阅读您的代码,并看到未定义的“Apps”变量,不知道它从何而来;因此这是一个糟糕的想法。 - Bakuriu
3个回答

5
我强烈建议不要这样做:将导入从使用功能的模块中分离出来会使跟踪模块之间的依赖关系更加困难。
如果你真的想这样做,一个选项是创建一个名为common_imports的新模块,并让它执行所需的导入操作。
然后在其他模块中添加以下内容:
from common_imports import *

这应该会给你提供该模块中的所有公共名称(包括所有导入内容)。

0

问题1:
必须找到一种导入包的方法,因此你有两个选择:
(如果我说错了或者不够详细,请纠正我)

1. 查看James的解决方案,你需要定义一个类,把所有模块放在里面,最后将它们导入到你的子类中。

2. 基本上不要在主类中导入任何东西,而是只在子类中导入一次。

例如:(在A_1子类中) import re
def functionThatUseRe(input): pass

然后在你的主类中,只需这样做: try: from YourPackage import A_1 #windows except: import A_1 #MAC OSX
A_1.functionThatUseRe("")

这样你就完全避免了多次导入模块的问题。

问题2:将class1.py放在与主类相同的目录中,或将其移动到另一个文件夹中,在Package1(&2).Apps中。

import Class1

从那里开始使用代码


0
回答您的第二个问题,如果您的两个名为Class1.py的模块实际上是同一个,则不应将其复制到两个包中。将其放在一个仅包含两者共同代码的包中,然后导入它即可。绝对不必复制文件并尝试在两个副本中维护每个更改。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接