我有一些全局常量,它们保存在一个.py文件中,并且在代码库的许多不同地方都需要用到:
from important_parameters import ROOT_DIR, ANOTHER_DIR
这种导入方式在很多文件中都是必需的,我认为这比到处传递这些参数要方便。问题在于,这些参数依赖于用户,即它们是相对目录路径。也就是说,如果另一个用户运行脚本,必须首先创建配置文件。因此,我考虑了如下方案:
if not os.path.exists('important_parameters.py'):
args = parser.parse_args()
create_params_file(args)
这里的参数可以在顶部指定,例如:
parser = argparse.ArgumentParser()
parser.add_argument(
'--root_data_dir', type=str, required=True
)
parser.add_argument(
'--another_data_dir', type=str, required=True
)
之后,我们可以创建配置文件:
def create_params_file(args):
with open('important_parameters.py', 'w') as file:
file.write(f'ROOT_DIR = "{os.path.join(args.root_data_dir)}"\n')
file.write(f'ANOTHER_DIR = "{os.path.join(args.another_data_dir)}"\n')
并在主块中使用if条件:
if __name__ == "__main__":
if not os.path.exists('important_parameters.py'):
args = parser.parse_args()
create_params_file(args)
但是,如果文件不存在,这种方法就无法工作,因为我首先会在顶部遇到导入错误。对于我的情况,有没有更优雅的解决方案呢?