如何在pyproject.toml中指定包安装顺序以解决lap依赖numpy问题
解决lap==0.4.0安装时numpy前置依赖报错问题
问题根源
lap==0.4.0的setup.py在执行安装流程的最开始就直接导入numpy做版本校验,而新版pip(比如22.0.3)的依赖安装逻辑和旧版(20.0.2)不同,不会提前安装lap的构建依赖numpy,导致触发ImportError。哪怕你在pyproject.toml里把numpy写在lap前面,Poetry或pip的依赖解析也不会严格按书写顺序执行,所以没用。
可行解决办法
1. 分步手动安装(最稳妥)
先单独装numpy,再装lap,强制保证依赖顺序:
# pip环境下 pip install numpy pip install lap==0.4.0 # Poetry环境下 poetry add numpy poetry add lap==0.4.0
2. 关闭pip的构建隔离(pip专属)
用--no-build-isolation参数让pip直接在当前环境构建lap,前提是当前环境已经装了numpy:
pip install lap==0.4.0 --no-build-isolation
3. 临时降级pip到兼容版本
如果必须通过pyproject.toml一键安装,可以先把pip降到20.0.2版本:
pip install pip==20.0.2 # 执行项目安装命令,例如 pip install -e . # 安装完成后升级回新版pip pip install --upgrade pip
4. 修改lap的安装逻辑(进阶)
fork lap的仓库,修改它的setup.py:把导入numpy的代码移到setup()函数内部,或者改用正确的构建依赖声明方式。之后用修改后的仓库安装:
pip install git+https://你的fork仓库地址.git@对应commit或标签
关于Poetry依赖顺序的说明
Poetry是基于依赖关系图解析安装顺序的,不会看你在pyproject.toml里的书写顺序。因为lap自己的包配置没正确声明构建阶段需要numpy,Poetry没法提前感知这个需求,所以调整顺序没用。
内容的提问来源于stack exchange,提问作者Ian
相关产品推荐
相关产品推荐

