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

use*_*743 4 python global python-module python-import python-2.7

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

每个线程包括从导入模块等使用功能math,time,numpy,等等等等

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

我想要做的是将所有我的第三方模块导入到globals文件中,这样我就可以编写import math一次,但是我的所有项目文件都可以使用math函数.

问题:

这有可能吗?

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

我目前的解决方案就是放

import math 
import time
import numpy
...
Run Code Online (Sandbox Code Playgroud)

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

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

小智 6

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

使用import *几乎总是被认为是不好的做法.请参阅"为什么导入*不好?" "从包中导入*"从文档.

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

不得不为import每个模块编写几个语句的缺点不会超过试图绕过它们所引入的潜在问题.


Zda*_*daR 5

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

importing_modules.py

from math import *
from numpy import *
from time import *
Run Code Online (Sandbox Code Playgroud)

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().
Run Code Online (Sandbox Code Playgroud)

  • 就像一个小评论一样,如果你在 jupyter 笔记本中有很多导入,并且笔记本的大小会减慢一切,那么这真的很方便。绝对超过了命名空间中出现错误和/或混乱的可能性。 (2认同)