py2app打包Python应用报错No module named cv2.config-3.9问题咨询
问题根因
py2app依赖的modulegraph依赖检索组件会通过PyPI安装包名查找依赖,而opencv-python包实际对外提供的导入模块名为cv2,二者名称不匹配,导致检索时找不到名为opencv-python的包,触发导入错误。
解决方案
按以下步骤操作即可解决:
- 第一步:修改项目中的
setup.py配置,手动指定包含的模块,同时屏蔽对opencv-python的检索,参考配置如下:
from setuptools import setup import sys # 兜底别名映射,可选添加 sys.modules['opencv-python'] = __import__('cv2') APP = ['app.py'] DATA_FILES = [] OPTIONS = { 'argv_emulation': True, # 手动指定需要打包的依赖模块 'includes': ['cv2', 'pandas', 'numpy', 'PyQt5'], # 显式排除检索不存在的opencv-python包名 'excludes': ['opencv-python'], # 若打包后运行提示cv2动态库缺失,添加以下配置(可通过pip show opencv-python查看Location字段替换对应路径) 'frameworks': ['/usr/local/lib/python3.9/site-packages/cv2/.dylibs/*'] } setup( app=APP, data_files=DATA_FILES, options={'py2app': OPTIONS}, setup_requires=['py2app'], )
- 第二步:清理历史打包缓存后重新执行打包命令:
rm -rf build dist python setup.py py2app
额外校验
打包前可执行pip list确认当前环境下opencv-python、pandas、PyQt5均已安装,且打包使用的Python解释器和运行app.py的解释器为同一个,避免多环境依赖错位。
内容的提问来源于stack exchange,提问作者cyril
相关产品推荐
相关产品推荐

