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

poetry can't find version of dependency even though it exists

当我在 poetry 中将我的 python 版本从 3.7 升级到 3.8 时,重新安装所有依赖项失败并出现以下版本:

ERROR: No matching distribution found for...

该版本的发行版可在 pypa 获得,并且通常是最新版本。

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

确实,弃用警报支持这一点,如果我尝试使用 pip(全局或其他方式)而不是 pip3 安装相同版本,则该错误始终可重现。

这个问题令人沮丧,单独删除 venv 似乎无济于事。我该如何解决这个本来就不应该存在的依赖问题?

这里有两个相互影响的问题。 1. 当你修改 python 版本时,poetry 似乎一直在搞砸 venv 的升级。根据 finswimmer 的说法,升级应该为新的 python 版本创建一个新的虚拟环境,但是当诗歌使用错误的 pip 版本或忘记它正在使用的虚拟环境时,这个过程可能会失败。 2. 诗歌使用任何东西 pip 没有问题 - 无法覆盖和强制使用 pip3。

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

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

有时,import <NAME> pip install <NAME> / poetry add <NAME> 不同。

示例:

import icd10

安装/诗歌:

pip install icd10-cm
poetry add icd10-cm

导入名称与安装名称相同是惯例 - 但情况并非总是如此。

这是因为 install 名称必须是唯一的,但导入名称实际上不必是唯一的,因为我们可以添加别名:

import icd10 as foo

Source