You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Py2app打包部署版崩溃求助(MacOS Catalina+Python3.7)

解决py2app编译可部署版本崩溃的问题

我之前在MacOS Catalina上用Python3.7+PyCharm打包应用时,也踩过一模一样的坑:用别名模式(python setup.py py2app -A)编译的.app能正常运行,但打包可部署版本(python setup.py py2app)就直接崩溃,控制台还弹出一堆缺失模块的提示,甚至做了个只导入rumps的极简版本,居然还报ModuleNotFoundError: No module named 'pkg_resources.py2_warn'。折腾了好一阵,终于找到了解决方案,分享给你:

第一步:解决pkg_resources.py2_warn的问题

这个错误是因为高版本的setuptools里自带了Python2兼容的py2_warn模块,但Python3环境根本用不上,还会导致py2app打包出错。我们直接降级setuptools到没有这个模块的版本就行:

pip install setuptools==44.0.0

第二步:完善setup.py的配置

py2app在打包可部署版本时,不会自动包含那些条件导入的模块(比如requests里的Python2兼容模块),所以我们得手动把这些缺失的模块加到配置里。修改后的setup.py如下:

from setuptools import setup

APP = ['test.py']
DATA_FILES = []
OPTIONS = {
    'argv_emulation': True,
    'includes': [
        'requests',
        'requests.compat',
        'urllib3',
        'urllib3.contrib.pyopenssl',
        'pkg_resources._vendor.six',
        'pkg_resources._vendor.appdirs',
        # 把控制台提示缺失的模块都列进来
        'Cookie', 'Queue', 'StringIO', 'cookielib', 'urllib2', 'urlparse',
        'cryptography.x509.extensions',
        # 那些Windows相关的模块不用慌,Mac环境里本来就没有,py2app会自动忽略
        'com', 'com.sun.jna', 'com.sun.jna.platform', 'win32com', 'win32com.shell'
    ],
    'packages': ['requests', 'rumps'],
    # 主动排除掉那个惹麻烦的py2_warn模块
    'excludes': ['pkg_resources.py2_warn']
}

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

第三步:清理缓存重新打包

打包前记得删掉之前生成的build和dist文件夹,避免旧缓存干扰:

rm -rf build dist

然后重新执行打包命令:

python setup.py py2app

这样打包出来的可部署版本应该就能正常运行了,亲测有效!

内容的提问来源于stack exchange,提问作者Eric

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 13:52:40