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

Posted

技术标签:

【中文标题】Python 在另一个文件中导入模块【英文标题】:Python import modules in another file 【发布时间】:2015-05-01 22:09:49 【问题描述】:

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

每个线程都包括使用来自导入模块的函数,例如mathtimenumpy 等。

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

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

问题:

1.这可能吗?

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

我目前的解决方案就是放

import math 
import time
import numpy
...

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

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

【问题讨论】:

Same module is being imported in different files的可能重复 了解多次调用import module 不会导致实际重复导入工作;我只是想知道是否有可能避免重复编写代码 import module 。感谢您的链接 【参考方案1】:

是的,我想有一种更优雅的方法可以节省多余的代码行。假设你要导入一些模块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 *

ma​​in.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().

【讨论】:

就像一个小评论,如果你在 jupyter notebook 中有很多导入,并且 notebook 的大小正在减慢一切,这真的很方便。绝对超过命名空间出现错误和/或混淆的可能性。【参考方案2】:

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

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

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

必须为每个模块编写一对import 语句的不利之处并不能超过试图绕过编写它们所带来的潜在问题。

【讨论】:

以上是关于Python 在另一个文件中导入模块的主要内容,如果未能解决你的问题,请参考以下文章

在pycharm中导入自定义模块

如何从包内的两个不同文件夹中导入一个模块,该模块导入另一个模块

在 ES 模块(Node.js)中导入 JSON 文件

如何导入python中的模块

python中pil如何导入?

无法在nodejs中导入带有require()的模块