在 Python 中包含外部文件

Posted

技术标签:

【中文标题】在 Python 中包含外部文件【英文标题】:Including external files in Python 【发布时间】:2012-05-04 17:28:42 【问题描述】:

我正在编写一个运行一些模拟的 Python 脚本,但它需要很多输入参数(大约 20 个)。所以我正在考虑将所有模拟参数包含在一个外部文件中。最简单的方法是什么?

我在 Stack Overflow 问题中找到了一个答案How to import a module given the full path?,将所有模拟参数放在一个文件 parm.py 中并使用 imp 包导入该模块。

这将允许运行此脚本的用户提供任何文件作为输入。如果我以这种方式导入模块:

parm = imp.load_source('parm', '/path/to/parm.py')

那么所有参数都必须引用为

parm.p1, parm.p2

但是,我只想在我的脚本中将它们称为 p1、p2 等。有没有办法做到这一点?

【问题讨论】:

您正在寻找类似“import *”的东西 - 不建议这样做。请参阅***.com/questions/2360724/… 中的答案。 解决方法:不要。无论如何,您一般都不应该进行 from ... import * 导入,因为这会使跟踪代码变得更加困难。 我希望用户提供模拟参数列表,对于他不提供的任何参数,将使用默认值。所以我正在考虑运行我的代码,它为参数分配所有默认值,然后执行一个 execfile('parm.py') 它将覆盖用户提供的所有变量。有没有更优雅的方法来做到这一点? 【参考方案1】:

从外部文件导入任意代码是个坏主意。

请将您的参数放入配置文件中,并使用 Python 的 ConfigParser 模块读取。

例如:

==> multipliers.ini <==
[parameters]
p1=3
p2=4

==> multipliers.py <==
#!/usr/bin/env python

import ConfigParser

config = ConfigParser.SafeConfigParser()
config.read('multipliers.ini')


p1 = config.getint('parameters', 'p1')
p2 = config.getint('parameters', 'p2')

print p1 * p2

【讨论】:

【参考方案2】:

您可以为此使用execfile(),但您应该完全考虑另一种方式。

【讨论】:

有什么简单的方法吗?有一段时间我想在命令行上将它们作为参数传递,但它们太多了。

以上是关于在 Python 中包含外部文件的主要内容,如果未能解决你的问题,请参考以下文章

在球拍中包含外部文件

在 React Native App 的 WebView 中包含外部 JavaScript 文件

在 Spring Boot JAR 中包含外部文件

仅在一个 Vue 组件中包含外部 CSS 库

如何在反应中包含外部javascript

如何在 CodeIgniter 中包含外部库?