requrements.txt 文件中 `=` 后指定的值是什么?

What does the value after `=` specify in requrements.txt file?

以下是 requirements.txt 文件的摘录。我理解 == 指定版本后的值。 = 后面的值指定什么?我可以排除吗?

icu==67.1=he1b5a44_0
lz4-c==1.9.2=he6710b0_1
xz==5.2.5=h7b6447c_0
qt==4.8.7=2

由于 requirements.txt 文档没有关于它们的信息,似乎它们对于 pip.

毫无意义

https://pip.pypa.io/en/stable/reference/pip_install/#requirements-file-format

说明你实际上没有piprequirements.txt file in the first place. This is a conda export, likely created with conda list --export,不能用pip处理

= 之后的值只是一个 build string,您可能会认为它是一个标识符,允许安装这个完全相同的版本。此处仅提供版本号是不够的,因为您可能拥有同一版本的不同版本。

显示您引用的 xz 包的 h7b6447c_0 版本的示例:

$ conda search xz=5.2.5 --info
Loading channels: done
xz 5.2.5 h7b6447c_0
-------------------
file name   : xz-5.2.5-h7b6447c_0.tar.bz2
name        : xz
version     : 5.2.5
build       : h7b6447c_0
build number: 0
size        : 438 KB
license     : LGPL-2.1 and GPL-2.0
subdir      : linux-64
url         : https://repo.anaconda.com/pkgs/main/linux-64/xz-5.2.5-h7b6447c_0.tar.bz2
md5         : e17620ef8fc8654e77f53b4f2995b288
timestamp   : 2020-04-16 04:36:07 UTC
dependencies: 
  - libgcc-ng >=7.3.0

如果文件是通过导出 conda 环境创建的(在这种情况下,它通常应该被称为 environment.yml,即 yml 文件),就会发生这种情况。

如果使用基本命令创建此文件

conda env export > environment.yml

它导出包的最严格定义,其中包括内部版本号(即您在第二个 = 之后看到的内容),并且通常是 OS-specific。这保证您可以 完全 重现与原始环境相同的环境(但也不能在其他操作系统上运行)。 中也捕获了此问题。在绝大多数情况下,没有它应该没问题,您可以自由删除内部版本号。如果你有权限访问这个环境,你可以“正确地”导出它,比如

conda env export > environment.yml --no-build