squ*_*gun 5 pyinstaller python-3.5
我正在Windows 10上使用pyinstaller使onefile可执行文件。我正在通过编辑.spec文件来包含数据文件(修补文件)...
如何在运行时存储对这些文件所做的更改?我的理解是在执行过程中将数据文件复制到临时目录。我可以使用从sys._MEIPASS获取的路径读取文件,但是重新启动程序后丢失的写入内容将丢失。
有没有办法写存储在exe文件中的pickle文件?
小智 -1
考虑使用os.path.abspath(os.path.dirname(sys.argv[0]))而不是sys._MEIPASS获取文件路径。Whilesys._MEIPASS指向执行期间复制文件的临时目录,os.path.abspath(os.path.dirname(sys.argv[0]))给出包含可执行脚本本身的目录的路径。通过将路径位置修改为数据文件的实际位置,您将能够写入它们。
代码示例:
import os
import sys
# Get the directory containing the executable script or main Python file.
base_path = os.path.abspath(os.path.dirname(sys.argv[0]))
# If it is executable in the dist/ remove the dist directory so that the path would be the same,
# whether it is run by executable or by main Python file.
if os.path.basename(base_path) == 'dist':
base_path = os.path.abspath(os.path.join(base_path, os.pardir))
# Assuming your pickle file is named 'data.pkl'
pickle_file_path = os.path.join(base_path, 'data.pkl')
# Modify the data as needed
with open(pickle_file_path, 'wb') as file:
pass
Run Code Online (Sandbox Code Playgroud)
请记住,这样可执行文件应始终保留在最初创建它的 dist 目录中。如果其他位置需要可执行文件,请创建快捷方式。
| 归档时间: |
|
| 查看次数: |
523 次 |
| 最近记录: |