我正在构建一个用Python编写的命令行应用程序。我想使用配置文件的想法,其中每个配置文件都有一些不同的值用于应用程序。
我设法创建一个properties.ini
文件并创建一个config_parser.py
文件,其中包含一个接收配置文件并将属性加载到某些变量中的函数。然后我将其导入到我需要使用的每个文件中。
我想在执行应用程序时将配置文件作为参数传递,加载正确的属性并将它们放在整个应用程序的上下文中,避免在任何地方使用import config_parser
。
例如,在我的properties.ini
我有:
[DEFAULT]
GLOBAL_EMAIL=example@email.com
[e2e_testing]
GLOBAL_EMAIL=another_email@email.com
在config_parser.py
我有:
import configparser
config = configparser.ConfigParser()
config.read('properties.ini')
GLOBAL_EMAIL = ''
def load_config(profile):
global GLOBAL_EMAIL
GLOBAL_EMAIL = config[profile]['GLOBAL_EMAIL']
对于每个脚本,我需要使用我所做的属性:
from application import config_parser as CFG
def method(profile):
CFG.load_config(profile)
print CFG.GLOBAL_EMAIL
理想情况下,我希望在执行main.py
(这是我的应用程序的入口点)期间加载此配置,然后在该包内的模块中共享,因此我不需要导入config_parser
到处都没有传递profile
变量。
我读到了__builtin__
,并考虑让config_parser
在__builtin__
中添加变量(因此它们可用于该软件包中的所有模块),但我'我不确定如何使用Pytest进行单元测试,因为__builtin__
只能用于源文件夹中的模块,我需要以某种方式模拟它。
提前致谢!
答案 0 :(得分:0)
您是否计划在一个流程(或一组流程?)中运行一个配置文件。如果是这样,您可以使用环境变量:
# main.py
import os
def load_config():
os.environ["GLOBAL_EMAIL"] = config[profile]['GLOBAL_EMAIL']
# module.py
def modfunc():
email = os.environ["GLOBAL_EMAIL"]