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

时间:2015-03-01 14:47:38

标签: python python-2.7 global python-import python-module

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

每个主题都包括使用mathtimenumpy等导入模块中的函数。

我已经有一个文件globalClasses.py,其中包含我的数据类型等的类定义,每个.py文件在开始时导入,按照这里的建议:http://effbot.org/pyfaq/how-do-i-share-global-variables-across-modules.htm。这很好用。

我想要做的是在globals文件中导入我的所有第三方模块,以便我可以编写import math一次,但是我的所有项目文件都能够使用math函数。

问题:

1。这可能吗?

2。这是一个好主意/它是很好的Python实践吗?

我目前的解决方案就是放

import math 
import time
import numpy
...

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

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

2 个答案:

答案 0 :(得分:6)

另一个答案显示了你想要的是什么(有点)可能,但没有解决你关于良好实践的第二个问题。

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

请记住PEP 20 显式优于隐式。通过在每个模块中进行明确的特定导入(例如from math import sqrt),从来没有混淆名称来自何处,模块的命名空间仅包含它所需的内容,并且防止了错误。

每个模块必须编写几个import语句的缺点并不会超过尝试编写它们所带来的潜在问题。

答案 1 :(得分:4)

是的,我想有更优雅的方法可以节省多余的代码。假设你要导入一些模块math, time, numpy(比如说​​),那么你可以创建一个文件importing_modules(比如说​​)并将各个模块导入为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().