使用 PyInstaller 创建的 .app 无法创建任何文件

.app Created with PyInstaller is Unable to Create Any Files

我使用 PyInstaller 创建了一个 standalone/windowed .app 文件,使用命令 pyinstaller --noconfirm --windowed main.spec 使用默认的 .spec 文件。

然后我使用 pkgbuildproductbuild 创建安装程序。但是,每当我 运行 我的程序在使用安装程序后,我完全无法创建文件。例如,使用默认的日志记录模块,当我的程序运行到 fileHandler = logging.FileHandler(resource_path("log.log")) 行时,程序崩溃并显示 PermissionError [errorno 13] permission denied。注意resource_path函数是:

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)

我看到一些教程和线程说错误与文件的位置有关。我不应该至少能够从应用程序的 .app/Contents/MacOS 目录中创建文件吗?

感谢您提供的任何帮助。

所以问题是,.pkg 以 root 身份安装,并且只授予所有者 (root) read/write/execute 权限;其他人只能得到 read/execute.

解决方法是将应用程序 sudo chmod -R 777 作为安装后脚本。为了让其他人更容易,我设置了一个样板应用程序,它将使用 pyinstaller 和 bash 脚本处理整个过程:https://github.com/The-Nicholas-R-Barrow-Company-LLC/python3-pyinstaller-base-app-codesigning

编辑:用 pip 创建了一个库:https://github.com/The-Nicholas-R-Barrow-Company-LLC/PyMacApp