即使存在,诗歌也找不到依赖的版本

Har*_*oli 18 python python-3.x python-poetry

当我在诗歌中将 python 版本从 3.7 升级到 3.8 时,重新安装所有依赖项都会失败,版本如下:

ERROR: No matching distribution found for...
Run Code Online (Sandbox Code Playgroud)

该版本的发行版可在 pypa 上找到,并且通常是最新版本。

简单地删除有问题的包并不能解决问题,因为其他包可能会导致诗歌失败。经过一番调查,似乎诗歌没有使用 pip3 在下面安装,而是使用 pip2.7。

事实上,这是由弃用警报支持的,并且如果我尝试使用 pip (全局或其他方式)而不是 pip3 安装相同版本,则该错误总是可重现的。

这个问题令人沮丧,单独删除 venv 似乎没有帮助。我怎样才能解决这个本来就不应该存在的依赖问题?

Har*_*oli 13

这里有两个相互影响的问题。

  1. 当你修改 python 版本时,poetry 似乎总是会搞砸 venv 的升级。根据 finswimmer 的说法,升级应该为新的 python 版本创建一个新的虚拟环境,但是当诗歌使用错误的pip版本或丢失其正在使用的虚拟环境时,此过程可能会失败。

  2. 诗歌pip毫无疑问地使用任何内容 - 无法覆盖和强制使用 pip3。

这是我用来解决这个问题的精炼步骤

  1. 删除虚拟环境(有时诗歌会丢失虚拟环境/认为它已经激活。最好清除石板)
rm -rf `poetry env list --full-path`
Run Code Online (Sandbox Code Playgroud)
  1. 创建一个新的虚拟环境(该命令应该失败,但将会创建 venv)
poetry install
Run Code Online (Sandbox Code Playgroud)
  1. 手动激活虚拟环境
source "$(poetry env list --full-path | tail -1 | sed 's/.\{12\}$//')/bin/activate"
Run Code Online (Sandbox Code Playgroud)
  1. 诗歌安装在虚拟环境中(这确保诗歌使用正确版本的pip)
poetry install
Run Code Online (Sandbox Code Playgroud)

  • Poetry 1.1.11 列出了 `poetry env list --full-path` 的输出,并修改了 `(Activated)`,使得该解决方案无法按原样工作。 (2认同)