作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经使用 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)
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/
我是一名优秀的程序员,十分优秀!