微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python 独立应用程序在启动时失败 (macOS)

如何解决Python 独立应用程序在启动时失败 (macOS)

因此,我使用 PyQt5 在 Python 3.8 中制作了这个简单的密码管理器,并且我一直在使用“py2app”模块来创建该程序的独立应用程序。但是,当我执行我的应用程序(从终端和查找器)时,我得到一个简单的弹出窗口,上面写着“keysafe Error”。我的代码执行得很好,没有错误。我似乎无法弄清楚这里的问题。如果有帮助,我会在 macOS 日志中收到此消息:

Mar 16 10:29:01 my-MacBook-Air com.apple.xpc.launchd[1]: Coalition Cache Hit: app<application.org.pythonmac.unspecified.keysafe.5854321.5857989(501)> [78372]
Mar 16 10:29:01 my-MacBook-Air keysafe[16934]: keysafe Error
Mar 16 10:29:02 my-MacBook-Air com.apple.xpc.launchd[1] (application.org.pythonmac.unspecified.keysafe.5854321.5857989[16934]): Service exited with abnormal code: 255

我也一直在使用以下终端命令来使用 py2app 生成我的独立应用程序:

cd <path_to_my_python_script>
py2applet --make-setup keysafe.py
python3 setup.py py2app

我真的不知道该怎么做,感谢所有帮助! 提前致谢!

更新: 如果您转到您的应用程序并在查找器中右键单击它,它将为您提供一个菜单选项。然后,点击 Show Package Contents。之后,导航到 Contents > MacOS,您将看到 Python 脚本的 Unix Executable File。运行该文件,您可以找到错误所在。
尝试此操作后,我在密码管理器中命名为 exit函数出现问题时出现错误。我认为关键字exit 可能与某种MacOS 设置冲突,因此将函数名称更改为exit_。使用更新后的脚本创建另一个独立应用程序后,我再次运行 Unix 可执行文件并出现新错误(因此 exit 关键字已修复)。我的新错误是:

Traceback (most recent call last):
  File "{path}/Password Manager/dist/keysafe.app/Contents/Resources/__boot__.py",line 110,in <module>
    _run()
  File "{path}/keysafe.app/Contents/Resources/__boot__.py",line 84,in _run
    exec(compile(source,path,"exec"),globals(),globals())
  File "{path}/Password Manager/dist/keysafe.app/Contents/Resources/keysafe.py",line 1,in <module>
    from cryptography.fernet import Fernet
  File "<frozen zipimport>",line 259,in load_module
  File "cryptography/fernet.pyc",line 16,in <module>
  File "<frozen zipimport>",in load_module
  File "cryptography/hazmat/primitives/padding.pyc",line 11,in load_module
  File "cryptography/hazmat/bindings/_padding.pyc",line 14,in <module>
  File "cryptography/hazmat/bindings/_padding.pyc",line 10,in __load
  File "imp.pyc",line 342,in load_dynamic
ModuleNotFoundError: No module named '_cffi_backend'
2021-04-04 10:30:46.115 keysafe[27312:1337934] keysafe Error
Saving session...
...copying shared history...
...saving history...truncating history files...
...completed.

[Process completed]

解决方法

所以我终于找到了这个问题的答案!
首先要做的是打开您的 setup.py 文件,默认文件应如下所示:

"""
This is a setup.py script generated by py2applet

Usage:
    python setup.py py2app
"""

from setuptools import setup

APP = ['my_program.py']
DATA_FILES = []
OPTIONS = {}

setup(
    app=APP,data_files=DATA_FILES,options={'py2app': OPTIONS},setup_requires=['py2app'],)

然后,更改 OPTIONS = {} 以包含您的每个导入

OPTIONS = {'includes': ['cryptography.fernet','PyQt5.QtWidgets','PyQt5.QtGui','PyQt5.Qt','PyQt5','PyQt5.QtCore','_cffi_backend']}

这会手动导入您的模块,如果您遇到任何类似的错误,这应该可以工作!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。