自8月中旬以来创建的Python虚拟环境为“python3-m pip冻结”增加了“AssertionError”`

自8月中旬以来创建的Python虚拟环境为“python3-m pip冻结”增加了“AssertionError”`,python,pip,virtual-environment,flit,Python,Pip,Virtual Environment,Flit,在MacOS 10.15.7(Python 3.8.6)和Ubuntu 20.04(Python 3.8.5)上,我已经为我正在编写的各种Python脚本安装了各种虚拟环境(都在Git和Github上)。项目使用pyproject.toml与flit一起使用。我使用脚本中使用的模块创建并填充了环境,如下所示(其中$VENVS是我保存虚拟环境的目录): 但是,在两种平台上,当在虚拟环境中执行命令时,python3-m pip freeze会得到不同的结果: 在8月17日之前创建的环境中,它会显示

在MacOS 10.15.7(Python 3.8.6)和Ubuntu 20.04(Python 3.8.5)上,我已经为我正在编写的各种Python脚本安装了各种虚拟环境(都在Git和Github上)。项目使用
pyproject.toml
flit
一起使用。我使用脚本中使用的模块创建并填充了环境,如下所示(其中$VENVS是我保存虚拟环境的目录):

但是,在两种平台上,当在虚拟环境中执行命令时,
python3-m pip freeze
会得到不同的结果:

  • 在8月17日之前创建的环境中,它会显示已安装的模块(应该显示)
  • 在较新的环境中,我得到:
我猜这取决于环境的创建时间,它基于目录时间戳和Readthedocs上构建的检查,Readthedocs在推送repo时会重建文档

具有8月17日之前创建的环境的项目的文档一直在不间断地重建,而具有较新环境的项目的文档自8月以来一直未能生成。随着8月17日的提交,添加了一个
requirements.txt
文件

如果我还原该
requirements.txt
,RTD构建将失败,并显示以下消息:

ERROR: Could not find a version that satisfies the requirement csv2shex==0.2 (from -r docs/requirements.txt (line 16)) (from versions: none)
ERROR: No matching distribution found for csv2shex==0.2 (from -r docs/requirements.txt (line 16))
如果我使用
停用
退出虚拟环境,执行
python3-m pip freeze>requirements.txt(在虚拟环境之外工作)并推送,Readthedocs将无法生成,并出现相同的错误

pip freeze>requirements.txt
在我使用7月份创建的虚拟环境时确实有效。然而,当我在Ubuntu上克隆该项目并重新创建一个虚拟环境时(如上所述),
pipfreeze
引发异常。如果我在MacOS上创建并填充一个新的虚拟环境,它也会失败。但是,如果我从7月份开始在虚拟环境中创建一个新的
requirements.txt
文件并推送,文档就会生成

pip第49行提出了例外情况,包括以下评论:

    # pip should never reach this point for editables, since
    # pip freeze inspects the editable project location to produce
    # the requirement string
    assert not direct_url.info.editable
我已经研究了好几个小时了。对
pip freeze
AssertionError
可编辑项目位置
等的搜索没有找到任何结果。结果只有12份,除了2015年或之前的一份,还有2019年关于Docker问题的一份

总而言之,我认为:

  • 在我的MacOS和Ubuntu系统上,
    pip-freeze
    在8月17日以后创建的虚拟环境中不起作用(使用
    python3-m-venv
  • Readthedocs文档在8月17日之前使用虚拟环境构建的
    requirements.txt
    文件存在的情况下成功构建
  • Readthedocs文档生成在任何虚拟环境之外生成的
    requirements.txt
    文件存在时失败——始终带有上面的消息,该消息指
然而,有些事情并不能说明问题:

  • 我相当肯定我会从虚拟环境中创建8月17日的
    requirements.txt
    文件,因为我从不在虚拟环境之外处理项目。但除非pip freeze
起作用,否则这怎么可能呢
有人能解释一下吗?这是python3-mvenv、flit或其他东西的问题吗?我是否至少正确地怀疑RTD构建的故障与pip冻结的故障有关?

pip冻结的故障确实是pip 2.2中的一个错误。这个bug对即将发布的PIP2.3有什么影响。

每个venv都有哪些版本的Python、Pip、flit和其他工具?具体来说,那些有效的和那些无效的之间有区别吗?当然,由于
pip freeze
不起作用,您需要从各个工具获取版本。例如,在激活一个env后,使用
pip--version
python--version
flit--version
,等等。不确定为什么会发生这种情况,但这里包含了您描述的
AssertionError
。github上的线程可能很有用。显然,pull请求是的一个实现。@jakub提到的更改是在pip版本20.1中。我的猜测是,您的旧版VENV安装了旧版本的pip,以后创建的VENV都使用版本20.1或更高版本,@Waylan感谢您的建议。7月份创建的虚拟环境使用Python3.8实现了Flit2.3.0和PIP20.2.3,PipFreeze在其中工作。较新的venv(其中
pip freeze
不起作用)在Python3.8中使用了Flit 3.0.0和pip 20.2.3。我已经创建了一个关于pip回购的问题,精确地描述了它。
ERROR: Could not find a version that satisfies the requirement csv2shex==0.2 (from -r docs/requirements.txt (line 16)) (from versions: none)
ERROR: No matching distribution found for csv2shex==0.2 (from -r docs/requirements.txt (line 16))
    # pip should never reach this point for editables, since
    # pip freeze inspects the editable project location to produce
    # the requirement string
    assert not direct_url.info.editable