You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

同一Python项目避免混用pip与Poetry的困惑及求助

问题解答

核心问题:Poetry找不到camelot版本的原因

你在pyproject.toml里写camelot = "^0.9.0"报错,是因为PyPI上的目标包实际名称是camelot-py,不是camelot——camelot是另一个无关包,没有你需要的0.9.0/0.10.1版本,所以版本解析失败。

正确用Poetry安装Camelot的步骤

1. 修正pyproject.toml的依赖配置

要安装带[base]可选依赖的camelot-py,在Poetry里的标准写法是:

[tool.poetry.dependencies]
python = "^3.8"
PyPDF2 = "2.12.1"
camelot-py = { version = "^0.10.1", extras = ["base"] }
  • extras = ["base"]对应pip命令里的camelot-py[base],用来安装基础依赖组
  • 版本号用^0.10.1可以兼容0.10.x系列的小版本更新

2. 处理PyPDF2版本冲突

如果直接执行poetry install仍出现PyPDF2版本冲突,说明camelot-py的依赖声明指定了旧版PyPDF2。这时可以用Poetry的依赖覆盖功能强制锁定版本:

[tool.poetry.dependencies]
python = "^3.8"
PyPDF2 = "2.12.1"
camelot-py = { version = "^0.10.1", extras = ["base"] }

[tool.poetry.overrides]
PyPDF2 = "2.12.1"

这个配置会强制让所有依赖(包括camelot-py)使用你指定的PyPDF2版本,和你之前手动修改的效果一致,但更符合Poetry的规范。

3. 执行安装

运行以下命令完成完整安装:

poetry install

关于混用pip和Poetry的问题

同一项目混用pip和Poetry确实违背包管理器的设计初衷,主要问题包括:

  • Poetry生成的poetry.lock和pyproject.toml会与pip安装的包不一致,后续他人用poetry install无法复现你的环境
  • pip安装的包不会被记录到pyproject.toml,导致依赖管理混乱
  • 可能出现隐性依赖冲突,后续升级其他包时容易引发故障

正确原则是:单个项目只用一个包管理器,优先用Poetry管理所有依赖,不要在Poetry虚拟环境中用pip安装包。

总结操作流程

  1. 在pyproject.toml里正确配置camelot-py的版本和可选依赖
  2. 用[tool.poetry.overrides]强制指定兼容的PyPDF2版本
  3. 执行poetry install完成安装,全程无需使用pip

内容的提问来源于stack exchange,提问作者robcat26

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 00:52:40