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

Python 在pyinstaller编译为exe后仍允许更改的外部配置文件?,python,config,external,Python,Config,External,我仍在学习,并试图了解这一切是如何运作的。。。。 我制作了一个脚本,它有一些用户可配置的东西,存储在一个单独的config.py文件中 当我运行脚本时,它从config.py文件导入变量。 如果我用pyinstaller编译它,它就不再从外部寻找它了 我的最终用户需要能够动态更新配置,以更改某些变量的功能 它用于排序和组织一些数据,因此一个用户可能有 variable1 = ('data1','data2','data3') 另一个用户可能需要添加一个data4或从该列表中删除一个data2,

我仍在学习,并试图了解这一切是如何运作的。。。。 我制作了一个脚本,它有一些用户可配置的东西,存储在一个单独的
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'])

您当然可以为每个用户提供一个可自定义的配置文件。您需要将其设置在程序和用户都可以找到的特定位置。通常这会设置为类似(在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)

您当然可以为每个用户提供一个可自定义的配置文件。您需要将其设置在程序和用户都可以找到的特定位置。通常这会设置为类似(在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)

我需要遵循文件的格式吗?目前,我正在导入一个.py文件示例,其中一个变量是'color01=('00FCC84E')cat1=(['Speakers','Atlas Mic Stands']),这完全取决于您和您的用户的悟性。json文件对于机器来说很容易读取,并且人类也可以正常读取。我非常喜欢yaml文件,因为它们非常容易让人阅读。如果我想将配置文件与exe文件放在同一个文件夹中,我是否要省去“('USERPROFILE')”+'\\.myprognam\`是它的一部分吗?或者如果它与主文件位于同一目录中,我只是将user\u config=myfilename.json设置为它的一部分。你不能这样做,因为exe文件只是将所有内容解压缩到%TEMP%并从那里运行,然后在程序关闭时将其清除。它不知道原始exe的位置。我需要遵循文件的格式吗?目前,我正在导入一个.py文件示例,其中一个变量是'color01=('00FCC84E')cat1=(['Speakers','Atlas Mic Stands']),这完全取决于您和您的用户的悟性。json文件对于机器来说很容易读取,并且人类也可以正常读取。我非常喜欢yaml文件,因为它们非常容易让人阅读。如果我想将配置文件与exe文件放在同一个文件夹中,我是否要省去“('USERPROFILE')”+'\\.myprognam\`是它的一部分吗?或者如果它与主文件位于同一目录中,我只是将user\u config=myfilename.json设置为它的一部分。你不能这样做,因为exe文件只是将所有内容解压缩到%TEMP%并从那里运行,然后在程序关闭时将其清除。它不知道原始exe的位置。