【问题标题】:pyinstaller can't find added files - Mac OSpyinstaller 找不到添加的文件 - Mac OS
【发布时间】:2020-07-31 08:16:26
【问题描述】:

我正在尝试使用 pyinstaller 3.6 在 Mac OS Catalina 10.15 上创建一个基于 python 3.7.7 的应用程序。我使用 Homebrew 和带有 pip 的 pyinstaller 安装了 python。

这个名为 GUI.py 的 Python 代码需要五个图像,这些图像存储在一个名为“resources”的文件夹中,所有内容都在“Project”文件夹中。所以项目的结构如下:

项目:

  • GUI.py
  • 资源:
    • image1.png
    • image2.png
    • image3.png
    • image4.png
    • image5.png

GUI.py 用于定位图像的路径类似于“resources/image1.png”、“resources/image2.png”等其余图像。

我打开一个终端并输入以下内容:

pyinstaller --add-data /Users/user/Desktop/Project/resources/*:resources /Users/user/Desktop/Project/GUI.py

然后创建 dist 和 build 文件夹以及 GUI.spec 文件。

当我转到 dist/GUI 文件夹并找到可执行文件时,问题出现了。我双击它打开我的应用程序,但出现以下错误:

FileNotFoundError: [Errno2] No such file or directory: 'resources/image1.png'

但是,如果我打开终端并转到 GUI 可执行文件所在的 dist/GUI 目录并手动执行它:

./GUI

它运行良好,应用程序已打开。

当我将选项 --nocnosole 添加到 pyinstaller 指令时,它也会发生同样的情况:

pyinstaller --add-data /Users/user/Desktop/Project/resources/*:resources --noconsole /Users/user/Desktop/Project/GUI.py

这会创建一个名为 GUI 的 Mac OS 应用程序,当我双击它时它不会打开。但是,和以前一样,如果我打开终端并转到 GUI/Contents/MacOS/,我会找到 GUI 可执行文件并手动执行它:

./GUI

然后它就可以正常工作了。

我不知道我是否正确添加了包含图像的资源文件夹,或者它是否是 pyinstaller 的 Mac OS 问题。

我添加了一些带有额外信息的注释:

  • 我在 Windows 10 和 Ubuntu 18.04.1 中进行了相同的整个过程,并且运行良好。我可以创建包含在 dist 文件夹中的可执行文件并将其导出到其他计算机,它就可以工作了。
  • 我使用不同的方式在 pyinstaller 命令中添加数据,但仍然无法正常工作:pyinstaller --add-data /Users/user/Desktop/Project/:. /Users/user/Desktop/Project/GUI.py
  • 我遵循了Pyinstaller adding data files 中提供的解决方案,但没有任何效果
  • python 应用程序是一个使用 tkinter、pyserial 和 PIL 的图形用户界面。另外,我使用了我在 pyinstaller 命令中使用 -p 选项添加的自定义包,但在这里省略了,因为它不是错误的来源。

我到处寻找解决方案,阅读 pyinstaller 提供的有关添加数据的文档,但我一无所获。

【问题讨论】:

  • 最后解决了吗?如果是这样,你能分享一下诀窍吗?

标签: python macos add pyinstaller


【解决方案1】:

这不是 Python 问题,而是 Mac 问题。在 Mac 上启动应用程序时,启动应用程序的目录实际上是“/.app/Contents/MacOS/”。我的猜测是,要么您需要将资源目录放在该位置,以便应用程序在启动时可以找到它,要么您需要找到一种方法来使用直接路径而不是看起来像您的相对路径'重新使用。我对 pyinstaller 不是很熟悉,但考虑到您在上面使用的语法,我的猜测是这样的:

pyinstaller --add-data /Users/user/Desktop/Project/resources/*:/LibraryDir/PythonStuff/resources /Users/user/Desktop/Project/GUI.py

【讨论】:

  • 谢谢你的回答我会试试这个。只是一个问题,/LibraryDir/PythonStuff 指的是什么?是的,我知道这是一个通用路径,但适用于 .app 文件夹?我从文档中读到的内容解释说,在这种情况下, /Users/user/Desktop/Project/resources/* 是源路径(资源文件夹中的所有文件),而 /LibraryDir/PythonStuff/resources 是目标路径,所以这会将“资源”文件夹放入.app? MacOS 文件夹?谢谢
猜你喜欢
  • 2016-12-19
  • 2019-03-31
  • 1970-01-01
  • 1970-01-01
  • 2012-08-16
  • 2015-01-14
  • 1970-01-01
  • 2012-06-10
  • 1970-01-01
相关资源
最近更新 更多