linux 如何正确指定pyinstaller资源文件?

j2qf4p5b  于 2023-02-15  发布在  Linux
关注(0)|答案(2)|浏览(318)

我想在Linux中通过双击创建一个可运行的.py应用程序。首先,我尝试了一个简单的例子:

#!/usr/bin/env python3
import cv2

img= cv2.imread('/home/andrei/WTZ/code/Computer-Vision-with-Python/DATA/test_image.jpg')
cv2.imshow('It works?', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

它只是打开一个镜像,没什么特别的。我安装了pyinstaller,在终端运行了以下命令:

pyinstaller --onefile --add-data="/home/andrei/WTZ/code/Computer-Vision-with-Python/DATA/test.jpg;/home/andrei/WTZ/code/Computer-Vision-with-Python/DATA/test.jpg" test.py

我遇到了以下错误:

pyinstaller: error: argument --add-data: invalid add_data_or_binary value: '/home/andrei/WTZ/code/Computer-Vision-with-Python/DATA/test.jpg;/home/andrei/WTZ/code/Computer-Vision-with-Python/DATA/test.jpg'

我哪里做错了?

5vf7fwbs

5vf7fwbs1#

在我的机器上查过了

pyinstaller --add-binary C:\Users\jezequiel\Desktop\diagram_new.png;.\images d.py

并将.PNG文件复制到包含d.exe文件的文件夹中名为images的子目录中。

toe95027

toe950272#

因此,建议的方法是首先创建一个main.spec文件-

pyi-makespec --windowed main.py

然后你应该得到一个main.spec文件,你可以用它来调用pyinstaller-所以你不需要通过命令行传递所有的资源文件。
然后,在您的main.spec文件(实际上是python代码)中,应该有类似于

a = Analysis(
    ...
    )

假设您的资源位于项目根目录下的resources目录中,您可以通过添加一行递归遍历此目录并添加所有文件,将它们全部添加到您的构建中。然后,您的应用应该能够引用这些文件。

a = Analysis(
    ...,
    datas = [(os.path.join(dp, f), dp) for dp, dn, filenames in os.walk('./resources') for f in filenames],
    )

相关问题