gpt4 book ai didi

python - 使用 Pyinstaller 可执行文件时仅临时保存的数据文件

转载 作者:行者123 更新时间:2023-12-03 14:43:21 25 4
gpt4 key购买 nike

我已经使用 PyQt5 创建了一个应用程序并使用 Pyinstaller 将其捆绑。
应用程序从 login.properties 文件加载登录信息,该文件与启动应用程序的 .py 文件存储在同一目录中。

按照建议 here我正在使用以下函数修改路径:

import os, sys
# Translate asset paths to useable format for PyInstaller

def resource_path(relative_path):
if hasattr(sys, '_MEIPASS'):
return os.path.join(sys._MEIPASS, relative_path)
return os.path.join(os.path.abspath('.'), relative_path)

它的原因是它创建了一个名为 _MEIPASS 的临时文件夹,其中包含诸如我的 login.properties 之类的文件。

在应用程序中,我想使用以下函数保存 login.properties 信息:
self.loginFile = resource_path('./login.properties')    

def save_login_info(self):
config = configparser.ConfigParser()
config.read(self.loginFile)

pw = self.login_ui.password_lineEdit.text()
un = self.login_ui.username_lineedit.text()
token = self.login_ui.token_lineEdit.text()
alias = self.login_ui.gmail_alias_lineedit_2.text()
...
config.set('Login', 'password', pw )
config.set('Login', 'username', un )
config.set('Login', 'security_token', token )
config.set('Login', 'alias', alias)

with open(self.loginFile, 'w') as loginfile:
config.write(loginfile)

print('Login info saved')

因此,更改后的登录信息会保存到临时文件/文件夹中,而不会保存到“原始”文件中。

任何想法如何缓解这个问题?

最佳答案

_MEIPASS 是一个临时文件夹,是的。条件if hasattr(sys, '_MEIPASS')有时用于了解应用程序是从源代码运行还是已构建。
不要将您的配置文件保存到 _MEIPASS 文件夹中。在用户目录中创建应用程序的文件夹是一个很好的做法。如果您运行 dev 版本(来自源代码),请在源目录中创建一个文件,否则在用户目录中。

def get_config_path():
if hasattr(sys, "_MEIPASS"):
abs_home = os.path.abspath(os.path.expanduser("~"))
abs_dir_app = os.path.join(abs_home, f".my_app_folder")
if not os.path.exists(abs_dir_app):
os.mkdir(abs_dir_app)
cfg_path = os.path.join(abs_dir_app, "login.properties")
else:
cfg_path = os.path.abspath(".%slogin.properties" % os.sep)
return cfg_path

关于python - 使用 Pyinstaller 可执行文件时仅临时保存的数据文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54770516/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com