gpt4 book ai didi

python - 使用 onefile 选项在 Pyinstaller 中添加数据文件

转载 作者:行者123 更新时间:2023-11-28 20:01:32 25 4
gpt4 key购买 nike

我正在尝试将图像添加到 Pyinstaller 生成的一个文件中。我读过很多这样的问题/论坛 oneone但仍然无法正常工作。

我知道对于一个文件操作,PyinSTLler 会生成一个可以通过 sys.MEIPASS 访问的临时文件夹。但是我不知道我应该在我的脚本中的确切位置添加这个 sys.MEIPASS

请出示以下内容:

1- 在哪里以及如何 sys.MEIPASS 应该被添加?在 python 脚本中,还是在 spec 文件中?

2- 使用的确切命令是什么?我试过了

pyinstaller --onefile --windowed --add-data="myImag.png;imag" myScript.py

pyinstaller --onefile --windowed myScript.py

然后在spec文件中添加('myImag.png','imag')然后运行

pyinstller myScript.spec

没有一个有效。

注意:我在windows 7下有python 3.6

最佳答案

当使用 PyInstaller 打包到单个文件时,运行 .exe 会将所有内容解压到 TEMP 目录中的文件夹中,运行脚本,然后丢弃临时文件。临时文件夹的路径会随着每次运行而变化,但对其位置的引用会作为 sys._MEIPASS 添加到 sys

要利用这一点,当您的 Python 代码读取任何也将打包到您的 .exe 中的文件时,您需要将文件位置更改为位于 sys._MEIPASS 下。换句话说,您需要将它添加到您的 Python 代码中。

这是一个示例,当打包到单个文件时,使用您引用的链接中的代码将文件路径调整到正确的位置。

例子

# data_files/data.txt
hello
world

# myScript.py
import sys
import os

def resource_path(relative_path):
""" Get absolute path to resource, works for dev and for PyInstaller """
try:
# PyInstaller creates a temp folder and stores path in _MEIPASS
base_path = sys._MEIPASS
except Exception:
base_path = os.path.abspath(".")

return os.path.join(base_path, relative_path)

def print_file(file_path):
file_path = resource_path(file_path)
with open(file_path) as fp:
for line in fp:
print(line)

if __name__ == '__main__':
print_file('data_files/data.txt')

使用以下选项运行 PyInstaller 打包文件:

pyinstaller --onefile --add-data="data_files/data.txt;data_files" myScript.py

构建myScript.exe,可以正常运行,可以打开读取打包后的数据文件。

关于python - 使用 onefile 选项在 Pyinstaller 中添加数据文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51060894/

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