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
相关产品推荐
相关产品推荐

