执行setup.py py2app时依赖查找目录错误如何解决
问题根因
当前环境存在多套Python 3.9解释器,命令绑定错配:
- 你执行
python3 setup.py py2app -A时调用的是框架版Python,解释器路径为/Library/Frameworks/Python.framework/Versions/3.9/bin/python3,它默认的依赖搜索路径仅包含自身目录下的site-packages,也就是/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages - 你之前安装numpy时调用的
pip3命令绑定的是另一套存放在/usr/local/路径下的Python 3.9,所以numpy被装到了/usr/local/lib/python3.9/site-packages目录,不在框架版Python的默认搜索路径里,才会触发DistributionNotFound报错。
从你执行python3 -m pip --version的返回结果也能验证:和python3绑定的pip本身就在框架版Python的site-packages目录下,你之前装numpy时并没有用这个绑定的pip执行安装。
修复方案
二选一即可:
方案1:给当前打包用的Python解释器重装对应依赖(最稳妥,无兼容问题)
不要直接用pip3命令装包,统一用和当前python3解释器绑定的pip安装所有依赖,执行命令:
python3 -m pip install -r requirements.txt
命令执行完成后,numpy等所有依赖都会被安装到框架版Python的默认搜索路径下,直接重新执行打包命令即可正常运行。
方案2:配置py2app额外搜索已有的依赖目录(无需重复装包)
修改setup.py中的OPTIONS配置,把已有的/usr/local/lib/python3.9/site-packages路径加入py2app的依赖搜索列表,修改后的代码如下:
from setuptools import setup with open('requirements.txt') as f: required = f.read().splitlines() APP = ['option_pricer.py'] DATA_FILES = [] OPTIONS = { # 新增额外依赖搜索路径 'extra_paths': ['/usr/local/lib/python3.9/site-packages'] } setup( app=APP, data_files=DATA_FILES, options={'py2app': OPTIONS}, setup_requires=['py2app'], install_requires=required, )
修改后重新执行打包命令,py2app会同时检查默认路径和你指定的额外路径下的依赖。
后续避坑提示
多Python环境下装包时,尽量不要直接调用pip/pip3命令,统一使用<你要用的python解释器路径> -m pip install <包名>的格式安装,就能从根源避免包装了但解释器找不到的路径错配问题。
内容的提问来源于stack exchange,提问作者thomas.mac
相关产品推荐
相关产品推荐

