【问题标题】:Pyinstaller error: 'SystemError: codesign failure!' on macOSPyinstaller 错误:“系统错误:代码设计失败!”在 macOS 上
【发布时间】:2021-10-23 08:23:48
【问题描述】:

我已经制作了一个应用程序,我现在正在 macOS 和 Windows 上分发(Windows 已成功编译)但是当我尝试编译我的应用程序时,它不断抛出错误 SystemError: codesign failure! 在 pyinstaller 中,我使用的是 --onefile 标志,我已经尝试不带标志(python pyinstaller.py app.py,我无法使用 python pyinstaller app.py,因为我被抛出 command未找到)。这是完整的错误信息:

326 INFO: Building PKG (CArchive) PKG-00.pkg
4245 WARNING: codesign command (['codesign', '-s', '-', '--force', '--all-architectures', '--timestamp', '/Users/admin/Library/Application Support/pyinstaller/bincache00_py39_64bit/x86_64/adhoc/no-entitlements/lib-dynload/resource.cpython-39-darwin.so']) failed with error code 1!
stdout: ''
stderr: '/Users/admin/Library/Application Support/pyinstaller/bincache00_py39_64bit/x86_64/adhoc/no-entitlements/lib-dynload/resource.cpython-39-darwin.so: invalid or unsupported format for signature\n'
Traceback (most recent call last):
  File "/Users/admin/Documents/Cloud/hero/pyinstaller.py", line 17, in <module>
    run()
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/PyInstaller/__main__.py", line 126, in run
    run_build(pyi_config, spec_file, **vars(args))
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/PyInstaller/__main__.py", line 65, in run_build
    PyInstaller.building.build_main.main(pyi_config, spec_file, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/PyInstaller/building/build_main.py", line 815, in main
    build(specfile, kw.get('distpath'), kw.get('workpath'), kw.get('clean_build'))
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/PyInstaller/building/build_main.py", line 762, in build
    exec(code, spec_namespace)
  File "/Users/admin/Documents/Cloud/hero/app.spec", line 23, in <module>
    exe = EXE(pyz,
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/PyInstaller/building/api.py", line 509, in __init__
    self.pkg = PKG(self.toc, cdict=kwargs.get('cdict', None),
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/PyInstaller/building/api.py", line 208, in __init__
    self.__postinit__()
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/PyInstaller/building/datastruct.py", line 159, in __postinit__
    self.assemble()
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/PyInstaller/building/api.py", line 274, in assemble
    fnm = checkCache(fnm, strip=self.strip_binaries,
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/PyInstaller/building/utils.py", line 391, in checkCache
    osxutils.sign_binary(cachedfile, codesign_identity, entitlements_file)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/PyInstaller/utils/osx.py", line 383, in sign_binary
    raise SystemError("codesign failure!")
SystemError: codesign failure!

由于我从未为 mac 编译过应用程序,而且这是我第一次这样做,我不知道这究竟意味着什么。这是使用 python 3.9。

【问题讨论】:

    标签: python-3.x macos pyinstaller


    【解决方案1】:

    这似乎是 pyinstaller 执行临时签名的方式的问题,因为在 4.3 之后的某个时间更改了代码签名(请参阅https://github.com/pyinstaller/pyinstaller/issues/6167)。在最新的 Big Sur (MacOS 11.5.2) 上构建应该可以正常工作,但我假设您使用的是 Catalina 或更早版本。

    您可以:

    • 使用 pip uninstall pyinstallerpip install -Iv pyinstaller==4.3 降级到 pyinstaller 4.3,然后按原样重建。

    • 提供证书以自行签署应用程序。

    如果您想自己签署应用程序,您可以这样做:

    1. 打开Keychain Access

    2. 转到屏幕顶部的菜单并选择Keychain Access &gt; Certificate Assistant &gt; Create a Certificate

    3. 在出现的窗口中将 Certificate Type 更改为 Code Signing ,选择 Create 并记下证书的名称

    4. 使用--codesign-identity &lt;name&gt; 标志构建您的pyinstaller 源,其中&lt;name&gt; 是您在步骤3 中创建的证书的名称。

    【讨论】:

    • 感谢@Lachlan 的解释。然而,这确实对我有用。我能够生成一个可执行文件。但是,我在 Travis CI 中进行了 CI/CD 构建,它生成了可执行文件。您的最终可执行文件不会被签名,您必须配置 CI/CD 管道以自动执行签署此可执行文件的工作。因为您将无法以其他方式分发它。至少该可执行文件不会在 Big Sur 上运行...
    • FWIW 我能够在 MacOS 12.1 上使用带有 --onefile 和 --windowed 参数的 Pyinstaller 5.0.dev0 构建和运行应用程序,而无需自己签署应用程序。尝试在网络驱动器上执行构建时,我确实遇到了代码设计问题,但一旦复制到我的 Mac 上,它就可以正常运行
    猜你喜欢
    • 2021-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-05
    • 2017-07-20
    • 2018-04-16
    • 2018-07-18
    相关资源
    最近更新 更多