如何在使用pyinstaller创建的可执行文件中写入数据文件

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 目录中。如果其他位置需要可执行文件,请创建快捷方式。