pyconfiger编译为exe后仍允许更改的外部配置文件?

时间:2019-06-04 00:55:51

标签: python config external

我仍在学习,并试图了解所有这些工作原理。 我编写了一个脚本,其中包含一些用户可配置的内容,这些内容存储在单独的config.py文件中。

当我运行脚本时,它将从该config.py文件中导入变量。 如果我用pyinstaller编译它,那么它将不再在外部寻找它 我的最终用户需要能够即时更新配置,以更改某些变量的作用

它用于排序和组织一些数据,因此一个用户可能拥有

variable1 = ('data1','data2','data3')

另一个用户可能需要添加data4或从该列表中删除data2,以根据其任务来自定义

如何做到这一点,以便在编译脚本的主要部分之后,我仍然可以拥有一个可编辑的配置文件,最终用户可以更改变量

-编辑以显示我已经发生的事情

这是我使用的当前配置文件...它叫做SortingConfig.py 然后我在主脚本中通过文件开头的这一行访问它

从SortingConfig导入*

####   Fill in your Details Below

####   Format within each set of () should look as Follows
####   ('Item 1' , 'Item 2' , 'Item 3')
####   Words that use an ' in the name such as L'Acoustics
####   Need to be Formatted as ('L\'Acoustics)
####   Using the Product Code instead of the Product Description 
####   can solve alot of problems created by Product Descriptions with an ' in them


#L1 Category to Keep
l1cat=('Audio Terminal', 'Communications/Telephone', 'Microphones', 'Speakers')


#Category to Remove
cat=('Audio Snakes', 'Speaker Accessories', 'Mic Accessories', 'W Coupler Cables')

#If Item appears in L1 / Category / Product Code / Product Description, Color it
#Formatting = (['Item1', 'Item2', 'Item3'])


#Color 1
color01=('00FCC84E')
cat1=(['Speakers','Atlas Mic Stands'])

#Color 2
color02=('00ABFF6B')
cat2=(['Audio Mixers/Console'])

#Color 3
color03=('00FF0000')
cat3=(['None'])

#Color 4
color04=('0000FFFF')
cat4=(['None2'])

#Color 5
color05=('0000FF00')
cat5=(['None3'])

1 个答案:

答案 0 :(得分:0)

您当然可以为每个用户有一个可自定义的配置文件。您需要将其设置在程序和用户都可以找到的特定位置。通常,它设置为类似(在Windows中)%USERPROFILE%\.myprogname\config.json。 (我写这篇文章是假设您正在使用json文件进行配置,尽管任何文件类型都可以。)

在程序中,您可以检查文件是否存在,如果存在,请使用它。否则,请使用与可执行文件打包在一起的默认值。

import os
import json

user_config = os.environ.get('USERPROFILE') + '\\.myprognam\\config.json'

if os.path.exists(user_config) and os.path.isfile(user_config):
    config_path = user_config
else:
    config_path = 'path/to/default_config.json'

with open(config_path) as fp:
    config = json.load(fp)