【问题标题】:Pyinstaller .app bundle won't open on MacPyinstaller .app 包无法在 Mac 上打开
【发布时间】:2020-02-16 02:00:00
【问题描述】:

我创建了一个 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 中,我使用os.getcwd() 获得了对root 目录的引用,但在尝试访问resources 文件夹时,运行该应用程序似乎并未使用此相对路径。我对此很陌生,所以我不确定我可能会出错,任何帮助将不胜感激!

【问题讨论】:

    标签: python wxpython pyinstaller


    【解决方案1】:

    您可以使用runtime information 获取您的代码所在文件夹的路径:

    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.jsoncold 可以使用:

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

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

    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
    

    但我从未尝试过。

    【讨论】:

      猜你喜欢
      • 2021-02-27
      • 1970-01-01
      • 1970-01-01
      • 2019-01-21
      • 2018-08-20
      • 1970-01-01
      • 1970-01-01
      • 2018-06-29
      • 2020-06-19
      相关资源
      最近更新 更多