在MacOS 10.15.7 (Python3.8.6)和Ubuntu20.04(Python3.8.5)上,我已经为我正在编写的各种Python脚本安装了不同的虚拟环境(都是用Git和Github编写的)。这些项目使用pyproject.toml与flit一起使用。我用脚本中使用的模块创建并填充了环境,如下所示(其中$VENVS是我保存虚拟环境的目录):
$ python3 -m venv $VENVS/csvenv
$ source $VENVS/csvenv/bin/activate
(csvenv) $ python3 -m pip install --upgrade flit
(csvenv) $ flit install -s # to install script as "editable"但是,在这两个平台上,当在虚拟环境中执行时,命令python3 -m pip freeze得到不同的结果:
ERROR: Exception:
Traceback (most recent call last):
File "/Users/tbaker/venvs/dcapenv/lib/python3.8/site-packages/pip/_internal/cli/base_command.py", line 228, in _main
status = self.run(options, args)
File "/Users/tbaker/venvs/dcapenv/lib/python3.8/site-packages/pip/_internal/commands/freeze.py", line 101, in run
for line in freeze(**freeze_kwargs):
File "/Users/tbaker/venvs/dcapenv/lib/python3.8/site-packages/pip/_internal/operations/freeze.py", line 67, in freeze
req = FrozenRequirement.from_dist(dist)
File "/Users/tbaker/venvs/dcapenv/lib/python3.8/site-packages/pip/_internal/operations/freeze.py", line 257, in from_dist
req = direct_url_as_pep440_direct_reference(
File "/Users/tbaker/venvs/dcapenv/lib/python3.8/site-packages/pip/_internal/utils/direct_url_helpers.py", line 49, in direct_url_as_pep440_direct_reference
assert not direct_url.info.editable
AssertionError我猜这取决于创建环境的时间,它既基于目录时间戳,也基于对Readthedocs构建的检查,Readthedocs每当推动回购时都会重新构建文档。
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))如果我使用deactivate退出虚拟环境,执行python3 -m pip freeze >requirements.txt (它在虚拟环境之外工作)并推送,Readthedocs无法生成同样的错误。
当我使用7月创建的虚拟环境时,pip freeze >requirements.txt确实可以工作。但是,当我在Ubuntu上克隆该项目并重新创建一个虚拟环境(如上面所示)时,pip freeze会引发异常。如果我在MacOS上创建和填充一个新的虚拟环境,它也会失败。但是,如果我从7月开始在虚拟环境中创建一个新的requirements.txt文件,并推送,文档就会生成。
这个异常在pip的helpers.py第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、editable project location等没有发现任何结果。Stackoverflow搜索"pip冻结断言错误“只产生了12个结果,除了2015年或之前的一个,再加上一个2019年关于一个涉及码头的问题的结果。
总之,在我看来:
pip freeze不工作在8月17日创建的虚拟环境中(使用python3 -m venv)requirements.txt文件时是成功的。requirements.txt文件中失败--总是与上面提到的消息一起使用然而,有些事情并不能说明问题:
requirements.txt文件,因为我从来不处理虚拟环境之外的项目。但是,如果pip freeze不起作用,那怎么可能呢?外面有人能解释吗?这是python3 -m venv、flit或其他方面的问题吗?我是否至少正确地怀疑RTD构建的失败与pip freeze的失败有某种联系?
发布于 2020-10-29 08:13:27
pip freeze的失败确实是PIP2.2中的一个错误。这个bug为即将发布的Pip2.3提供了已经修好了。
https://stackoverflow.com/questions/64339735
复制相似问题