'Compare packages between two anaconda installations
I had two versions of Python, with Anaconda, installed in my Mac, 3.5 and 3.7. Is there any way to know what packages I had installed in 3.5 that are not in 3.7, like those that you can install with pip (pulp, wordcloud, and alike).
What I have tried so far is using command line with this:
diff -rq anaconda/.../python3.5/site-packages anaconda3/.../python3.7/site-packages
This shows the differences between the directories but shows a lot of information of repeated packages and core modules. How can I find the differences in packages between two Anaconda versions?
Solution 1:[1]
You can list all the packages installed under a specific environment using conda list
. Also, you can export the list to a file with the flag --export
.
For example, if your environments are named python3
and pytorch_p36
, you can do the following:
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
The command also accepts the flag --json
, which will export the data in a json format, suitable for automatic processing.
Solution 2:[2]
Thanks dataista for your solution for Linux. For Windows diff does not work, but in Windows one can use 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
Solution 3:[3]
A recent development now provides the ability to compare a conda environment against a requirements file. The only mention of this I've found so far is in a pull request that was merged back on July 16, 2020. I can verify that the compare
command works in conda version 4.8.4. It should be noted that only differences are listed in the output.
Usage:
(ProcMCD43A1) C:\Users\justincase>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",
...
]
Solution 4:[4]
Using mini conda 4.11, with the new compare
command, I'm going to compare a named environment with a path environment.
? conda --version
conda 4.11.0
First list the environments I have
? 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
Now I want to compare the conda env in the directory ./path/project/env
with the named env tfm1 (my tensorflow env)...
First I switch to the tfm1 env and export its package list:
? conda activate tfm1
? conda env export -f /Users/me/path/tfm1_env.yml
Next I switch to the other env, in the directory:
? conda activate /Users/me/path/project/env
And finally use the new compare command:
? 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
...
The documentation is not too clear on this, but "Specification pkg" refers to a package found in the environment whose specification we exported to a file ("tfm1" in my example). "Running pkg" is, of course, the one I activated.
Even less clear, the "not found" refers to the active environment: the packages "black", "fribidi", etc, are in my tfm1 (specified) but not in my project/env (active) environment.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | dataista |
Solution 2 | Davma |
Solution 3 | |
Solution 4 | Rhubarb |