Python 在另一个文件中导入模块

Python import modules in another file

我目前正在将一个项目(以前的大文件)重构为几个单独的 python 文件,每个文件都运行我的应用程序的特定部分。 例如,GUIthread.py 运行 GUI,Computethread.py 做一些数学运算,等等。

每个线程都包括使用导入模块中的函数,如 mathtimenumpy

我已经有一个文件 globalClasses.py 包含我的数据类型等的 class 定义,每个 .py 文件在开始时导入,根据此处的建议:http://effbot.org/pyfaq/how-do-i-share-global-variables-across-modules.htm。这运作良好。

我想做的是将我所有的 3rdparty 模块导入到 globals 文件中,这样我就可以编写,例如,import math 一次,但拥有我的所有项目能够使用 math 函数的文件。

问题:

1.这可能吗?

2。是好idea/is还是好Python练习?

我目前的解决方案就是把

import math 
import time
import numpy
...

(加上我正在使用的所有其他模块的导入)

在我项目中每个文件的顶部...但这看起来不是很整洁,并且在将代码块从一个文件移动到另一个文件时很容易忘记移动依赖项的导入语句...

是的,我想有一种更优雅的方法可以节省多余的代码行。假设你想导入一些模块 math, time, numpy(say),那么你可以创建一个文件 importing_modules(say) 并将各种模块导入为 from module_name import *,所以 importing_modules.py 可能看起来像这样:

importing_modules.py

from math import *
from numpy import *
from time import *

main.py

from importing_modules import *
#Now you can call the methods of that module directly
print sqrt(25) #Now we can call sqrt() directly in place of math.sqrt() or importing_modules.math.sqrt().

另一个答案显示了您想要的东西(在某种程度上)是可能的,但没有解决您关于良好做法的第二个问题。

使用 import * 几乎总是被认为是不好的做法。 请参阅文档中的 "Why is import * bad?" and "Importing * from a package"

记住 PEP 20 显式优于隐式 。在每个模块中使用明确的特定导入(例如 from math import sqrt),就不会混淆名称的来源,您的模块的名称空间仅包含它需要的内容,并且可以防止错误。

必须为每个模块编写几个 import 语句的缺点并没有超过试图绕过编写它们所引入的潜在问题。