比较两个 anaconda 安装之间的软件包



我有两个版本的Python,带有Anaconda,安装在我的Mac上,3.5和3.7。有没有办法知道我在 3.5 中安装了哪些软件包不在 3.7 中,比如你可以用 pip 安装的软件包(pulp、wordcloud 等)。

到目前为止,我尝试的是使用命令行:

diff -rq anaconda/.../python3.5/site-packages anaconda3/.../python3.7/site-packages

这显示了目录之间的差异,但显示了重复包和核心模块的大量信息。如何找到两个 Anaconda 版本之间的软件包差异?

您可以使用conda list列出在特定环境下安装的所有软件包。此外,您可以将列表导出到带有标志的文件--export. 例如,如果您的环境名为python3pytorch_p36,则可以执行以下操作:

conda list -n python3 --export > python3-packages.txt
conda list -n pytorch_p36 --export > pytorch_p36-packages.txt
diff python3-packages.txt pytorch_p36-packages.txt

该命令还接受标志--json,它将以 json 格式导出数据,适合自动处理。

感谢 dataista 为 Linux 提供的解决方案。对于 Windows diff 不起作用,但在Windows中可以使用FC:

conda list -n python3 --export > python3-packages.txt
conda list -n pytorch_p36 --export > pytorch_p36-packages.txt
FC python3-packages.txt pytorch_p36-packages.txt

使用 mini conda 4.11 和新的compare命令,我将比较命名环境与路径环境。

❯ conda --version
conda 4.11.0

首先列出我拥有的环境

❯ conda env list
# conda environments:
#
base                  *  /Users/me/miniforge3
experiments              /Users/me/miniforge3/envs/experiments
tfm1                     /Users/me/miniforge3/envs/tfm1
/Users/me/path/project/env

现在我想将目录./path/project/env中的 conda env 与命名的 env tfm1(我的张量流 env)进行比较...... 首先,我切换到 tfm1 环境并导出其包列表:

❯ conda activate tfm1
❯ conda env export -f /Users/me/path/tfm1_env.yml

接下来,我切换到目录中的另一个环境:

❯ conda activate /Users/me/path/project/env

最后使用新的比较命令:

❯ conda compare /Users/me/path/tfm1_env.yml
black not found
certifi found but mismatch. Specification pkg: certifi==2021.10.8=py38h10201cd_1, Running pkg: certifi==2021.10.8=pypi_0
click not found
dataclasses not found
executing found but mismatch. Specification pkg: executing==0.8.2=pyhd8ed1ab_0, Running pkg: executing==0.8.3=pyhd8ed1ab_0
flit-core found but mismatch. Specification pkg: flit-core==3.6.0=pyhd8ed1ab_0, Running pkg: flit-core==3.7.1=pyhd8ed1ab_0
fonttools found but mismatch. Specification pkg: fonttools==4.29.1=py38hea4295b_0, Running pkg: fonttools==4.31.2=py38h33210d7_0
fribidi not found
...

文档对此不太清楚,但"规范 pkg"是指在环境中找到的包,我们将其规范导出到文件中(在我的示例中为"tfm1")。 当然,"运行 pkg"是我激活的那个。

更不清楚的是,"未找到"指的是活动环境:"黑色"、"fribidi"等包在我的tfm1(指定),但不在我的项目/环境(活动)环境中。

最近的一项开发现在提供了将 conda 环境与需求文件进行比较的功能。到目前为止,我发现的唯一提及是在 2020 年 7 月 16 日合并的拉取请求中。我可以验证compare命令是否适用于 conda 版本 4.8.4。应该注意的是,输出中仅列出差异。

用法:

(ProcMCD43A1) C:Usersjustincase>conda compare environment.yml --json
[
"argon2-cffi found but mismatch. Specification pkg: argon2-cffi==20.1.0=py37he774522_1, Running pkg: argon2-cffi==20.1.0=py37h4ab8f01_1",
"attrs found but mismatch. Specification pkg: attrs==19.3.0=py_0, Running pkg: attrs==20.2.0=pyh9f0ad1d_0",
"backcall found but mismatch. Specification pkg: backcall==0.2.0=py_0, Running pkg: backcall==0.2.0=pyh9f0ad1d_0",
"bleach found but mismatch. Specification pkg: bleach==3.1.5=py_0, Running pkg: bleach==3.2.0=pyh9f0ad1d_0",
"brotlipy found but mismatch. Specification pkg: brotlipy==0.7.0=py37he774522_1000, Running pkg: brotlipy==0.7.0=py37h4ab8f01_1000",
"bzip2 found but mismatch. Specification pkg: bzip2==1.0.8=he774522_0, Running pkg: bzip2==1.0.8=he774522_3",
"cffi found but mismatch. Specification pkg: cffi==1.14.0=py37h7a1dbc1_0, Running pkg: cffi==1.14.3=py37h26f1ce3_0",
"cfitsio found but mismatch. Specification pkg: cfitsio==3.470=he774522_5, Running pkg: cfitsio==3.470=hbbe6aef_6",
"cftime found but mismatch. Specification pkg: cftime==1.2.1=py37h2a96729_0, Running pkg: cftime==1.2.1=py37h44b1f71_0",
"chardet found but mismatch. Specification pkg: chardet==3.0.4=py37_1003, Running pkg: chardet==3.0.4=py37hc8dfbb8_1006",
"click not found",
"click-plugins not found",
"cligj not found",
"cryptography found but mismatch. Specification pkg: cryptography==2.9.2=py37h7a1dbc1_0, Running pkg: cryptography==3.1=py37h26f1ce3_0",
"curl found but mismatch. Specification pkg: curl==7.67.0=h2a8f88b_0, Running pkg: curl==7.71.1=h4b64cdc_5",
"cycler found but mismatch. Specification pkg: cycler==0.10.0=py37_0, Running pkg: cycler==0.10.0=py_2",
"descartes not found",
"entrypoints found but mismatch. Specification pkg: entrypoints==0.3=py37_0, Running pkg: entrypoints==0.3=py37hc8dfbb8_1001",
"fiona not found",
"freexl found but mismatch. Specification pkg: freexl==1.0.5=hfa6e2cd_0, Running pkg: freexl==1.0.5=hd288d7e_1002",
"gdal found but mismatch. Specification pkg: gdal==3.0.2=py37hdf43c64_0, Running pkg: gdal==3.1.2=py37h6ddc196_1",
"geopandas not found",
"geos found but mismatch. Specification pkg: geos==3.8.0=h33f27b4_0, Running pkg: geos==3.8.1=he025d50_0",
"geotiff found but mismatch. Specification pkg: geotiff==1.5.1=h5770a2b_1, Running pkg: geotiff==1.6.0=h09e6dc1_1",
"h5py not found",
"hdf4 found but mismatch. Specification pkg: hdf4==4.2.13=h712560f_2, Running pkg: hdf4==4.2.13=hf8e6fe8_1003",
"hdf5 found but mismatch. Specification pkg: hdf5==1.10.4=h7ebc959_0, Running pkg: hdf5==1.10.6=nompi_he0bbb20_101",
...
]

另请查看 pyenvdiff 的pyenvdiff

颇具讽刺意味的是,pyenvdiff还没有康达套餐。有人愿意为pyenvdiff创建和提交conda-forge配方吗?

最新更新