使用Poetry无法安装指定版本的opencv-python与numpy求助
问题:Poetry安装opencv-python 4.5.5.62与numpy 1.19.5时依赖解析失败
尝试给Poetry项目安装opencv-python 4.5.5.62和numpy 1.19.5时,执行poetry add numpy==1.19.5触发依赖冲突错误:
$ poetry add numpy==1.19.5 Because example depends on opencv-python (4.5.5.62) which depends on numpy (>=1.21.2), numpy is required. So, because example depends on numpy (1.19.5), version solving failed.
但根据PyPI上opencv-python 4.5.5.62的依赖说明,在Linux+Python 3.9.7环境下,numpy的最低要求是>=1.19.3,1.19.5本应兼容:
$ curl -s https://pypi.org/pypi/opencv-python/4.5.5.62/json | jq '.info.requires_dist' [ "numpy (>=1.13.3) ; python_version < \"3.7\"", "numpy (>=1.21.2) ; python_version >= \"3.10\"", "numpy (>=1.21.2) ; python_version >= \"3.6\" and platform_system == \"Darwin\" and platform_machine == \"arm64\"", "numpy (>=1.19.3) ; python_version >= \"3.6\" and platform_system == \"Linux\" and platform_machine == \"aarch64\"", "numpy (>=1.14.5) ; python_version >= \"3.7\"", "numpy (>=1.17.3) ; python_version >= \"3.8\"", "numpy (>=1.19.3) ; python_version >= \"3.9\"" ]
同时,用pip可以成功安装兼容版本(日志显示opencv-python对numpy的实际依赖要求符合环境约束):
$ pip3 install opencv-python Collecting opencv-python Using cached opencv_python-4.6.0.66-cp36-abi3-macosx_10_15_x86_64.whl (46.4 MB) Collecting numpy>=1.17.3 Using cached numpy-1.23.2-cp38-cp38-macosx_10_9_x86_64.whl (18.1 MB) Installing collected packages: numpy, opencv-python Successfully installed numpy-1.23.2 opencv-python-4.6.0.66
该问题在Ubuntu 18.04、macOS 12.4(Intel)系统,Python 3.8.10、3.9.7版本下均会出现。
解决方法
1. 升级Poetry到最新版本
旧版本的Poetry可能存在环境特定依赖解析的bug,执行以下命令升级:
poetry self update
升级后重新尝试安装命令,看是否能正确匹配环境对应的依赖约束。
2. 手动覆盖依赖约束
如果升级后问题仍存在,可通过Poetry的依赖覆盖功能强制指定兼容的numpy版本:
在项目的pyproject.toml中添加或修改以下内容:
[tool.poetry.dependencies] python = "^3.9" opencv-python = "4.5.5.62" numpy = "==1.19.5" [tool.poetry.overrides] numpy = "==1.19.5"
保存后执行:
poetry lock --no-update poetry install
此操作会强制Poetry接受指定的numpy版本,忽略自动解析时的错误约束。
3. 手动编辑lock文件(不推荐)
如果上述方法无效,可直接编辑poetry.lock文件,找到numpy的条目,将版本修改为1.19.5,并确保对应的依赖哈希值正确。之后执行poetry install。
注意:此方法可能导致后续依赖更新时出现问题,仅作为临时解决方案。
内容的提问来源于stack exchange,提问作者johnnymielony
相关产品推荐
相关产品推荐

