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

Posted

技术标签:

【中文标题】即使存在,诗歌也找不到依赖的版本【英文标题】:poetry can't find version of dependency even though it exists 【发布时间】:2020-08-08 10:25:56 【问题描述】:

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

ERROR: No matching distribution found for...

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

仅仅删除有问题的包并不能解决问题,因为诗歌可能会与其他包一起失败。经过一番调查,似乎以某种方式,诗歌不是使用 pip3 安装在下面,而是使用 pip2.7。

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

这个问题令人沮丧,单独删除 venv 似乎没有帮助。我该如何解决这个原本不应该存在的依赖问题?

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

如果系统 python 改变了,如果小版本还没有一个新的 venv,或者你使用项目内的 venv,诗歌将总是创建一个新的 venv。这是一个预期的behavior。您的 venv 中的 pip 版本是您的 python 安装提供的版本(这不一定与您当前的系统相同)。但是,如果您在期望 pip3 时得到 pip2,我猜您的系统/配置有问题。 “创建一个新的虚拟环境(这应该失败)”是什么意思? Re: 什么意思:我把评论修改得更清楚一点 回复:我猜你的系统/配置有问题:Positive 无法意识到它应该使用哪个版本的 pip(取决于 python 集的版本)? Poetry 1.1.11 列出了 poetry env list --full-path 的输出并修正了 (Activated),使得该解决方案无法按原样工作。 修复和更新

以上是关于即使存在,诗歌也找不到依赖的版本的主要内容,如果未能解决你的问题,请参考以下文章

Laravel - 即使路线存在也找不到页面

JasperException - 即使存在标签也找不到文件

即使文件存在,Composer 也找不到 composer.json 文件

CSS 模块在 Codesandbox 中不起作用 - 即使它们存在也找不到文件

使用包时,即使在同一文件夹中也找不到依赖于其他类的类

即使已安装 Composer 也找不到 ext-mbstring