我正在一个Python项目中,运行该程序的人需要指定一些变量,程序在执行过程中将使用这些变量。我想知道要维持生产级编码标准的首选方法,是使用CLI还是JSONconfig文件。
P.S。
更具体地说,这是一个Spark作业,运行该作业的开发人员需要指定这些外部参数
答案 0 :(得分:1)
一个好的方法是将config.py文件与.env文件一起使用。这使您可以在.env
文件中秘密定义变量,并在config.py
中使用python的dotenv
和os
库对其进行访问。 .env
中定义的变量的实际内容不会在项目中公开。例如,在项目目录中,您可以有一个名为.env
的文件,其中包含类似
# project/.env
foo='bar'
a=10
important_var='345v4325'
和config.py
中的
# project/config.py
import os
from dotenv import load_dotenv
load_dotenv()
secret_foo = os.environ.get('foo')
secret_a = os.environ.get('a')
secret_important_var = os.environ.get('important_var')
然后导入配置并像这样使用vars
# project/module.py
import config
foo = config.secret_foo
因此,项目经理可以修改.env
中的内容,而无需修改任何代码。如果隐私不是问题,则可以跳过.env
的内容,并直接在config.py
注释
python-dotenv
不是标准的python库。如果要避免新的依赖关系,可以通过在bash脚本(例如
# ~/.bashrc
export foo='bar'
# and so on...
并运行source ~/.bashrc
,然后在config.py
中删除from dotenv import load_dotenv
和load_dotenv
行。
如果代码在专用服务器上执行,则效果很好,您可以在其中定义所需的环境变量。
答案 1 :(得分:0)
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--someoption", type=str, help="something")
args = parser.parse_args()
print(args.someoption)
您可以使用argparse软件包在CLI中传递选项,非常简单。您可以阅读文档here
输出:
vignesh@DESKTOP-C9L0NQI:/mnt/c/Users/vprabhakaran/Downloads/sunm$ ./argprs.py --someoption printthis
printthis
要解析配置文件,您可以使用configparser包,非常简单。