首页 > 解决方案 > Pyinstaller .app 包无法在 Mac 上打开

问题描述

我创建了一个 wxPython GUI 应用程序,我想分发它以在 macOS 上运行。

首先,这是我的文件夹结构:

root/
├── MyApp.py
|
├── scripts/
|   ├── script.py
|
├── resources/
|   ├── file1.json
|   ├── file2.txt

MyApp.py文件运行script.pyscript.py引用文件resources夹中的文件。

为了创建.app捆绑包,我使用了Pyinstaller这样的方法:

cd /path/to/root/folder
pyinstaller MyApp.py --windowed

这会创建一个.app文件,但是当我尝试打开它时它会立即关闭。

为了调查这个问题,我去了这里:

MyApp.app > Contents > MacOS > MyApp (A Unix executable)

这从终端运行应用程序,但我收到此错误:

FileNotFoundError:[Errno 2] 没有这样的文件或目录:'/Users/MyAccount/resources'

script.py中,我使用 获得了对root目录的引用os.getcwd(),但在尝试访问resources文件夹时,运行应用程序似乎没有使用此相对路径。我对此很陌生,所以我不确定我可能会出错,任何帮助将不胜感激!

标签: pythonwxpythonpyinstaller

解决方案


您可以使用运行时信息来获取代码所在文件夹的路径:

import sys
import os

if getattr(sys, 'frozen', False):
    # this is a Pyinstaller bundle
    root_path = sys._MEIPASS
else:
    # normal python process
    root_path = os.getcwd()

然后,例如,file1.json使用以下命令访问您的感冒:

path_to_file1 = os.path.join(root_path, 'resources', 'file1.json')

但是,如果不在命令行(或文件)中resources指定它们,您文件夹中的两个文件可能不会包含在您的 app 文件夹中:Pyinstaller.spec

pyinstaller --windowed --add-data "resources/file1.json:resources" --add-data "resources/file2.txt:resources" MyApp.py

您可以只在--add-data选项中指定文件夹,如下所示:

pyinstaller --windowed --add-data "resources:resources" MyApp.py

但我从未尝试过。


推荐阅读