Python 自 8 月中旬以来创建的虚拟环境为 `python3 -m pip freeze` 引发了 `AssertionError`
Python virtual environments created since mid-August raise `AssertionError` for `python3 -m pip freeze`
在 MacOS 10.15.7 (Python 3.8.6) 和 Ubuntu 20.04 (Python 3.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
在虚拟环境中执行时会得到不同的结果:
- 在 8 月 17 日之前创建的环境中,它会显示已安装的模块(应该如此)。
- 在较新的环境中,我得到:
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 构建的检查,每当推送回购时它都会重建文档。
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 的 direct_url_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
等的搜索均未找到任何结果。 Whosebug search "pip freeze assertionerror" 仅产生 12 个结果,除了一个来自 2015 年或之前的结果外,还有一个来自 2019 年,涉及一个涉及 Docker.
的问题
总而言之,在我看来:
- 在我的 MacOS 和 Ubuntu 系统上,
pip freeze
在自 8 月 17 日以来创建的虚拟环境中不起作用(使用 python3 -m venv
)
- 在使用早于 8 月 17 日的虚拟环境构建的
requirements.txt
文件存在的情况下,Readthedocs 文档构建成功。
- 如果存在在任何虚拟环境之外构建的
requirements.txt
文件,Readthedocs 文档构建会失败——总是出现上面的消息,它指的是
然而,有些事情并没有加起来:
- 我相当确定我会在虚拟环境中创建 8 月 17 日的
requirements.txt
文件,因为我从不在虚拟环境之外处理项目。但是,除非 pip freeze
正常工作,否则怎么可能?
有人能解释一下吗?这是 python3 -m venv
、flit
或其他问题吗?我是否至少怀疑 RTD 构建的失败与 pip freeze
的失败有关?
pip freeze
的失败确实是 Pip 2.2 中的一个错误。对于即将发布的 Pip 2.3,此错误具有 already been fixed。
在 MacOS 10.15.7 (Python 3.8.6) 和 Ubuntu 20.04 (Python 3.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
在虚拟环境中执行时会得到不同的结果:
- 在 8 月 17 日之前创建的环境中,它会显示已安装的模块(应该如此)。
- 在较新的环境中,我得到:
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 构建的检查,每当推送回购时它都会重建文档。
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 无法构建并出现相同的错误。
pip freeze >requirements.txt
确实有效。但是,当我在 Ubuntu 上克隆该项目并重新创建虚拟环境(如上所述)时,pip freeze
引发异常。如果我在 MacOS 上为此创建并填充新的虚拟环境,它也会失败。但是,如果我从 7 月开始在虚拟环境中创建一个新的 requirements.txt
文件并推送,则会生成文档。
在 pip 的 direct_url_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
等的搜索均未找到任何结果。 Whosebug search "pip freeze assertionerror" 仅产生 12 个结果,除了一个来自 2015 年或之前的结果外,还有一个来自 2019 年,涉及一个涉及 Docker.
总而言之,在我看来:
- 在我的 MacOS 和 Ubuntu 系统上,
pip freeze
在自 8 月 17 日以来创建的虚拟环境中不起作用(使用python3 -m venv
) - 在使用早于 8 月 17 日的虚拟环境构建的
requirements.txt
文件存在的情况下,Readthedocs 文档构建成功。 - 如果存在在任何虚拟环境之外构建的
requirements.txt
文件,Readthedocs 文档构建会失败——总是出现上面的消息,它指的是
然而,有些事情并没有加起来:
- 我相当确定我会在虚拟环境中创建 8 月 17 日的
requirements.txt
文件,因为我从不在虚拟环境之外处理项目。但是,除非pip freeze
正常工作,否则怎么可能?
有人能解释一下吗?这是 python3 -m venv
、flit
或其他问题吗?我是否至少怀疑 RTD 构建的失败与 pip freeze
的失败有关?
pip freeze
的失败确实是 Pip 2.2 中的一个错误。对于即将发布的 Pip 2.3,此错误具有 already been fixed。