conda / conda-lock

Lightweight lockfile for conda environments
https://conda.github.io/conda-lock/
Other
495 stars 103 forks source link

Unstable hash of environment.yml file #449

Closed AlbertDeFusco closed 1 year ago

AlbertDeFusco commented 1 year ago

Checklist

What happened?

With the following environment.yml file I have found that the input-hash to be unstable in that repeated runs of conda lock change the input hash and thereby force a re-lock of the dependencies.

dependencies:
  - python=3.10
  - pip
  - pip:
    - pydantic[email,dotenv]
channels:
  - defaults

Here are repeated runs of conda lock where you'll see the hashes change. Sometimes they are stable for several runs and sometimes they change every time.

❯ conda lock --check-input-hash && grep content_hash -A 3 conda-lock.yml
Locking dependencies for ['linux-64', 'osx-64', 'win-64']...
INFO:conda_lock.conda_solver:linux-64 using specs ['python 3.10.*', 'pip *']
INFO:conda_lock.conda_solver:osx-64 using specs ['python 3.10.*', 'pip *']
INFO:conda_lock.conda_solver:win-64 using specs ['python 3.10.*', 'pip *']
 - Install lock using: conda-lock install --name YOURENV conda-lock.yml
  content_hash:
    osx-64: c2829066366d5a09d4fdaa19727f5b07f687c3670980ca989af84f358ed8ae23
    linux-64: d4e0652a60780d56cb678c38a1511b55654f5fde80acee506de4d9c2ae4bdc0d
    win-64: 57b4e3b120da54d5ea5478d3babf841cf428b49c2834692fab7825197de80759
❯ conda lock --check-input-hash && grep content_hash -A 3 conda-lock.yml
Locking dependencies for ['linux-64', 'osx-64', 'win-64']...
INFO:conda_lock.conda_solver:linux-64 using specs ['python 3.10.*', 'pip *']
INFO:conda_lock.conda_solver:osx-64 using specs ['python 3.10.*', 'pip *']
INFO:conda_lock.conda_solver:win-64 using specs ['python 3.10.*', 'pip *']
 - Install lock using: conda-lock install --name YOURENV conda-lock.yml
  content_hash:
    osx-64: 8bdd9cab829b9fb42cef4f2ec1776ee05700c1710fc2bcac1fc3b3205c8b1dc2
    linux-64: 68026c2fdd6685527ad77bb9b09f9565029694b67a4844b62e8e2bccdd58fef4
    win-64: 0ee9db12fff1d9531c31c9760d179952574b25cf5a2f72530e3646ab9715be4c
❯ conda lock --check-input-hash && grep content_hash -A 3 conda-lock.yml
Locking dependencies for ['linux-64', 'osx-64', 'win-64']...
INFO:conda_lock.conda_solver:linux-64 using specs ['python 3.10.*', 'pip *']
INFO:conda_lock.conda_solver:osx-64 using specs ['python 3.10.*', 'pip *']
INFO:conda_lock.conda_solver:win-64 using specs ['python 3.10.*', 'pip *']
 - Install lock using: conda-lock install --name YOURENV conda-lock.yml
  content_hash:
    osx-64: c2829066366d5a09d4fdaa19727f5b07f687c3670980ca989af84f358ed8ae23
    linux-64: d4e0652a60780d56cb678c38a1511b55654f5fde80acee506de4d9c2ae4bdc0d
    win-64: 57b4e3b120da54d5ea5478d3babf841cf428b49c2834692fab7825197de80759
❯ conda lock --check-input-hash && grep content_hash -A 3 conda-lock.yml
Locking dependencies for ['linux-64', 'osx-64', 'win-64']...
INFO:conda_lock.conda_solver:linux-64 using specs ['python 3.10.*', 'pip *']
INFO:conda_lock.conda_solver:osx-64 using specs ['python 3.10.*', 'pip *']
INFO:conda_lock.conda_solver:win-64 using specs ['python 3.10.*', 'pip *']
 - Install lock using: conda-lock install --name YOURENV conda-lock.yml
  content_hash:
    osx-64: 8bdd9cab829b9fb42cef4f2ec1776ee05700c1710fc2bcac1fc3b3205c8b1dc2
    linux-64: 68026c2fdd6685527ad77bb9b09f9565029694b67a4844b62e8e2bccdd58fef4
    win-64: 0ee9db12fff1d9531c31c9760d179952574b25cf5a2f72530e3646ab9715be4c

I have traced the problem down to pkg_resources

❯ while :; do python -c 'from pkg_resources import Requirement;p=Requirement.parse("pydantic[email,dotenv]");print(p.extras)'; done
('email', 'dotenv')
('email', 'dotenv')
('email', 'dotenv')
('email', 'dotenv')
('dotenv', 'email')
('email', 'dotenv')
('email', 'dotenv')
('email', 'dotenv')
('email', 'dotenv')
('dotenv', 'email')
('dotenv', 'email')
('dotenv', 'email')
('dotenv', 'email')
('email', 'dotenv')

I will submit a PR shortly that can protect against this case by ensuring that the extras field is sorted in the conda_lock.models.lock_spec._BaseDependency pydantic model.

Conda Info

active environment : base
    active env location : /Users/adefusco/Applications/miniconda3
            shell level : 1
       user config file : /Users/adefusco/.condarc
 populated config files : /Users/adefusco/.condarc
          conda version : 23.5.0
    conda-build version : 3.23.3
         python version : 3.9.13.final.0
       virtual packages : __archspec=1=arm64
                          __osx=13.4=0
                          __unix=0=0
       base environment : /Users/adefusco/Applications/miniconda3  (writable)
      conda av data dir : /Users/adefusco/Applications/miniconda3/etc/conda
  conda av metadata url : None
           channel URLs : https://repo.anaconda.com/pkgs/main/osx-arm64
                          https://repo.anaconda.com/pkgs/main/noarch
                          https://repo.anaconda.com/pkgs/r/osx-arm64
                          https://repo.anaconda.com/pkgs/r/noarch
                          https://conda.anaconda.org/anaconda-cloud/osx-arm64
                          https://conda.anaconda.org/anaconda-cloud/noarch
                          https://conda.anaconda.org/conda-forge/osx-arm64
                          https://conda.anaconda.org/conda-forge/noarch
          package cache : /Users/adefusco/Applications/miniconda3/pkgs
                          /Users/adefusco/.conda/pkgs
       envs directories : /Users/adefusco/Applications/miniconda3/envs
                          /Users/adefusco/.conda/envs
               platform : osx-arm64
             user-agent : conda/23.5.0 requests/2.28.1 CPython/3.9.13 Darwin/22.5.0 OSX/13.4
                UID:GID : 502:20
             netrc file : None
           offline mode : False

Conda Config

==> /Users/adefusco/.condarc <==
extra_safety_checks: False
ssl_verify: True
add_anaconda_token: True
channels:
  - defaults
  - anaconda-cloud
  - conda-forge
restore_free_channel: False

Conda list

# packages in environment at /Users/adefusco/Applications/miniconda3:
#
# Name                    Version                   Build  Channel
aiohttp                   3.8.3            py39h80987f9_0    defaults
aiosignal                 1.2.0              pyhd3eb1b0_0    defaults
altgraph                  0.17.3           py39hca03da5_0    defaults
anaconda-client           1.11.0           py39hca03da5_0    https://repo.anaconda.cloud/repo/main
anaconda-project          0.11.1           py39hca03da5_0    https://repo.anaconda.cloud/repo/main
ansi2html                 1.8.0            py39h2804cbe_0    conda-forge
anyio                     3.5.0            py39hca03da5_0    defaults
appdirs                   1.4.4                    pypi_0    pypi
appnope                   0.1.2           py39hca03da5_1001    defaults
argon2-cffi               21.3.0             pyhd3eb1b0_0    defaults
argon2-cffi-bindings      21.2.0           py39h1a28f6b_0    defaults
arrow                     1.2.3            py39hca03da5_1    defaults
asciinema                 2.2.0              pyhd8ed1ab_0    conda-forge
asttokens                 2.0.5              pyhd3eb1b0_0    defaults
async-timeout             4.0.2            py39hca03da5_0    defaults
attrs                     22.1.0           py39hca03da5_0    defaults
backcall                  0.2.0              pyhd3eb1b0_0    defaults
backports                 1.1                pyhd3eb1b0_0    defaults
backports.functools_lru_cache 1.6.4              pyhd3eb1b0_0    defaults
backports.tempfile        1.0                pyhd3eb1b0_1    defaults
backports.weakref         1.0.post1                  py_1    defaults
beautifulsoup4            4.12.2           py39hca03da5_0    defaults
binaryornot               0.4.4              pyhd3eb1b0_1    defaults
bleach                    4.1.0              pyhd3eb1b0_0    defaults
boltons                   23.0.0           py39hca03da5_0    defaults
brotlipy                  0.7.0           py39h1a28f6b_1002    defaults
bzip2                     1.0.8                h620ffc9_4    defaults
c-ares                    1.19.0               h80987f9_0    defaults
ca-certificates           2023.05.30           hca03da5_0    defaults
cachecontrol              0.12.11          py39hca03da5_1    defaults
cachecontrol-with-filecache 0.12.11          py39hca03da5_1    defaults
cachy                     0.3.0              pyhd3eb1b0_0    defaults
cctools                   949.0.1             hc179dcd_25    defaults
cctools_osx-arm64         949.0.1             h332cad3_25    defaults
certifi                   2023.5.7         py39hca03da5_0    defaults
cffi                      1.15.1           py39h80987f9_3    defaults
cfgv                      3.3.1            py39hca03da5_0    defaults
chardet                   5.1.0            py39h2804cbe_0    conda-forge
charset-normalizer        2.0.4              pyhd3eb1b0_0    defaults
cleo                      2.0.1            py39hca03da5_0    defaults
click                     8.0.4            py39hca03da5_0    defaults
click-default-group       1.2.2            py39hca03da5_0    defaults
clikit                    0.6.2              pyhd8ed1ab_2    conda-forge
clyent                    1.2.2            py39hca03da5_1    defaults
cmarkgfm                  0.4.2            py39h1a28f6b_0    defaults
colorama                  0.4.6            py39hca03da5_0    defaults
commonmark                0.9.1                    pypi_0    pypi
conda                     23.5.0           py39hca03da5_0    defaults
conda-audit               0.8.1            py39hca03da5_0    https://repo.anaconda.cloud/repo/main
conda-build               3.23.3           py39hca03da5_0    https://repo.anaconda.cloud/repo/main
conda-content-trust       0.1.3            py39hca03da5_0    defaults
conda-libmamba-solver     23.3.0           py39hca03da5_0    defaults
conda-lock                2.1.0              pyhd8ed1ab_0    conda-forge
conda-pack                0.6.0              pyhd3eb1b0_0    defaults
conda-package-handling    2.1.0            py39hca03da5_0    defaults
conda-package-streaming   0.8.0            py39hca03da5_0    defaults
conda-project             0.2.0              pyhd8ed1ab_0    conda-forge
conda-repo-cli            1.0.5            py39hca03da5_0    https://repo.anaconda.cloud/repo/main
conda-souschef            2.2.3            py39hca03da5_0    defaults
conda-token               0.3.0              pyhd3eb1b0_0    https://repo.anaconda.cloud/repo/main
conda-tree                1.0.5              pyhd8ed1ab_0    conda-forge
conda-verify              3.4.2                      py_1    defaults
condax                    0.0.5              pyhd8ed1ab_0    conda-forge
cookiecutter              1.7.3              pyhd3eb1b0_0    defaults
crashtest                 0.3.1                    pypi_0    pypi
cryptography              39.0.1           py39h834c97f_0    defaults
decorator                 5.1.1              pyhd3eb1b0_0    defaults
defusedxml                0.7.1              pyhd3eb1b0_0    defaults
distlib                   0.3.6            py39hca03da5_0    defaults
docutils                  0.18.1           py39hca03da5_3    defaults
dulwich                   0.21.3           py39h80987f9_0    defaults
editables                 0.3              py39hca03da5_0    defaults
ensureconda               1.4.3            py39hca03da5_0    defaults
entrypoints               0.4              py39hca03da5_0    defaults
executing                 0.8.3              pyhd3eb1b0_0    defaults
filelock                  3.9.0            py39hca03da5_0    defaults
fmt                       9.1.0                h48ca7d4_0    defaults
frozenlist                1.3.3            py39h80987f9_0    defaults
fsspec                    2023.3.0         py39hca03da5_0    defaults
future                    0.18.3           py39hca03da5_0    defaults
gitdb                     4.0.7              pyhd3eb1b0_0    defaults
gitpython                 3.1.30           py39hca03da5_0    defaults
glob2                     0.7                pyhd3eb1b0_0    defaults
grayskull                 2.2.2            py39hca03da5_0    defaults
h11                       0.12.0             pyhd3eb1b0_0    defaults
h2                        4.0.0            py39hca03da5_3    defaults
hatch                     1.7.0              pyhd8ed1ab_0    conda-forge
hatch-vcs                 0.2.0            py39hca03da5_0    defaults
hatchling                 1.17.1             pyhd8ed1ab_0    conda-forge
hpack                     4.0.0                      py_0    defaults
html5lib                  1.1                pyhd3eb1b0_0    defaults
httpcore                  0.15.0           py39hca03da5_0    defaults
httpx                     0.23.0           py39hca03da5_0    defaults
hyperframe                6.0.1              pyhd3eb1b0_0    defaults
hyperlink                 21.0.0             pyhd3eb1b0_0    defaults
icu                       68.1                 hc377ac9_0    defaults
identify                  2.5.5            py39hca03da5_0    defaults
idna                      3.4              py39hca03da5_0    defaults
importlib-metadata        6.0.0            py39hca03da5_0    defaults
importlib_metadata        6.0.0                hd3eb1b0_0    defaults
install                   1.3.5                    pypi_0    pypi
ipython                   8.4.0            py39hca03da5_0    https://repo.anaconda.cloud/repo/main
ipython_genutils          0.2.0              pyhd3eb1b0_1    defaults
jaraco.classes            3.2.1              pyhd3eb1b0_0    defaults
jedi                      0.18.1           py39hca03da5_1    defaults
jinja2                    3.1.2            py39hca03da5_0    defaults
jinja2-time               0.2.0              pyhd3eb1b0_3    defaults
jq                        1.6                  h1a28f6b_1    https://repo.anaconda.cloud/repo/main
jsonpatch                 1.32               pyhd3eb1b0_0    defaults
jsonpointer               2.1                pyhd3eb1b0_0    defaults
jsonschema                4.17.3           py39hca03da5_0    defaults
jupyter-server-mathjax    0.2.6              pyh5bfe37b_1    conda-forge
jupyter_client            8.1.0            py39hca03da5_0    defaults
jupyter_core              5.3.0            py39hca03da5_0    defaults
jupyter_server            1.23.4           py39hca03da5_0    defaults
jupyterlab_pygments       0.1.2                      py_0    defaults
keyring                   23.13.1          py39hca03da5_0    defaults
krb5                      1.19.4               h8380606_0    defaults
ld64                      530                 hb29bf3f_25    defaults
ld64_osx-arm64            530                 h001ce53_25    defaults
ldid                      2.1.2                h64d1936_2    defaults
libarchive                3.6.2                h09f0540_1    defaults
libblas                   3.9.0           16_osxarm64_openblas    conda-forge
libcblas                  3.9.0           16_osxarm64_openblas    conda-forge
libcurl                   7.88.1               h0f1d93c_0    defaults
libcxx                    14.0.6               h848a8c0_0    defaults
libedit                   3.1.20221030         h80987f9_0    defaults
libev                     4.33                 h1a28f6b_1    defaults
libffi                    3.4.4                hca03da5_0    defaults
libgfortran               5.0.0           11_3_0_hca03da5_28    defaults
libgfortran5              11.3.0              h009349e_28    defaults
libiconv                  1.16                 h1a28f6b_2    defaults
libidn2                   2.3.4                h80987f9_0    defaults
liblapack                 3.9.0           16_osxarm64_openblas    conda-forge
liblief                   0.12.3               h313beb8_0    defaults
libllvm14                 14.0.6               h7ec7a93_3    defaults
libmamba                  1.4.1                h48ca7d4_0    defaults
libmambapy                1.4.1            py39h48ca7d4_0    defaults
libnghttp2                1.46.0               h95c9599_0    defaults
libopenblas               0.3.21               h269037a_0    defaults
libsodium                 1.0.18               h1a28f6b_0    defaults
libsolv                   0.7.22               h98b2900_0    defaults
libssh2                   1.10.0               hf27765b_0    defaults
libunistring              0.9.10               h1a28f6b_0    defaults
libuv                     1.39.0               h1a28f6b_0    defaults
libxml2                   2.10.3               h372ba2a_0    defaults
libzlib                   1.2.13               h03a7124_4    conda-forge
llvm-openmp               14.0.6               hc6e5704_0    defaults
lockfile                  0.12.2           py39hca03da5_0    defaults
lz4-c                     1.9.4                h313beb8_0    defaults
macholib                  1.16.2           py39hca03da5_0    defaults
markdown-it-py            2.2.0            py39hca03da5_1    defaults
markupsafe                2.1.1            py39h1a28f6b_0    defaults
matplotlib-inline         0.1.6            py39hca03da5_0    defaults
mdurl                     0.1.0            py39hca03da5_0    defaults
mistune                   0.8.4           py39h1a28f6b_1000    defaults
more-itertools            8.12.0             pyhd3eb1b0_0    defaults
msgpack-python            1.0.3            py39h525c30c_0    defaults
multidict                 6.0.2            py39h1a28f6b_0    defaults
nbclient                  0.5.13           py39hca03da5_0    defaults
nbconvert                 6.4.4            py39hca03da5_0    https://repo.anaconda.cloud/repo/main
nbdime                    3.1.1              pyhd8ed1ab_0    conda-forge
nbformat                  5.7.0            py39hca03da5_0    defaults
ncurses                   6.4                  h313beb8_0    defaults
nest-asyncio              1.5.6            py39hca03da5_0    defaults
networkx                  2.8.4            py39hca03da5_1    defaults
nodeenv                   1.7.0            py39hca03da5_0    defaults
nodejs                    16.13.1              h2b10c05_0    https://repo.anaconda.cloud/repo/main
numpy                     1.21.1           py39h1a24bff_2    defaults
oniguruma                 6.9.7.1              h1a28f6b_0    defaults
openssl                   1.1.1u               h1a28f6b_0    defaults
packaging                 23.0             py39hca03da5_0    defaults
pandocfilters             1.5.0              pyhd3eb1b0_0    defaults
parso                     0.8.3              pyhd3eb1b0_0    defaults
pastel                    0.2.1                      py_0    defaults
patch                     2.7.6             h1a28f6b_1001    defaults
pathlib                   1.0.1              pyhd3eb1b0_1    defaults
pathspec                  0.10.3           py39hca03da5_0    defaults
pcre                      8.45                 hc377ac9_0    defaults
pcre2                     10.37                h37e8eca_1    defaults
pexpect                   4.8.0              pyhd3eb1b0_3    defaults
pickleshare               0.7.5           pyhd3eb1b0_1003    defaults
pip                       23.1.2                   pypi_0    pypi
pkginfo                   1.9.6            py39hca03da5_0    defaults
platformdirs              2.6.2              pyhd8ed1ab_0    conda-forge
pluggy                    1.0.0            py39hca03da5_1    defaults
poetry                    1.4.0            py39hca03da5_0    defaults
poetry-core               1.5.1            py39hca03da5_0    defaults
poetry-plugin-export      1.3.0            py39h5c051be_0    defaults
poyo                      0.5.0              pyhd3eb1b0_0    defaults
pre-commit                3.0.4            py39h2804cbe_0    conda-forge
progressbar2              4.2.0            py39hca03da5_0    defaults
prometheus_client         0.14.1           py39hca03da5_0    defaults
prompt-toolkit            3.0.36           py39hca03da5_0    defaults
pstree                    2.39                 h3422bc3_0    conda-forge
psutil                    5.9.0            py39h1a28f6b_0    defaults
ptyprocess                0.7.0              pyhd3eb1b0_2    defaults
pure_eval                 0.2.2              pyhd3eb1b0_0    defaults
py                        1.11.0             pyhd3eb1b0_0    defaults
py-lief                   0.12.3           py39h313beb8_0    defaults
pybind11-abi              4                    hd3eb1b0_1    defaults
pycosat                   0.6.4            py39h1a28f6b_0    defaults
pycparser                 2.21               pyhd3eb1b0_0    defaults
pydantic                  1.10.2           py39h1a28f6b_0    defaults
pygments                  2.15.1           py39hca03da5_1    defaults
pyinstaller               5.6.2            py39h80987f9_0    defaults
pyinstaller-hooks-contrib 2022.14          py39hca03da5_0    defaults
pylev                     1.4.0                    pypi_0    pypi
pyopenssl                 23.0.0           py39hca03da5_0    defaults
pyperclip                 1.8.2              pyhd8ed1ab_2    conda-forge
pyproject_hooks           1.0.0            py39hca03da5_0    defaults
pyrsistent                0.18.0           py39h1a28f6b_0    defaults
pysocks                   1.7.1            py39hca03da5_0    defaults
python                    3.9.13          hc596b02_0_cpython    conda-forge
python-build              0.10.0           py39hca03da5_0    defaults
python-dateutil           2.8.2              pyhd3eb1b0_0    defaults
python-dotenv             0.21.0           py39hca03da5_0    defaults
python-fastjsonschema     2.16.2           py39hca03da5_0    defaults
python-installer          0.6.0            py39hca03da5_0    defaults
python-libarchive-c       2.9                pyhd3eb1b0_1    defaults
python-slugify            5.0.2              pyhd3eb1b0_0    defaults
python-utils              3.3.3            py39hca03da5_0    defaults
python.app                3                py39h1a28f6b_0    https://repo.anaconda.cloud/repo/main
python_abi                3.9                      3_cp39    conda-forge
pytz                      2022.7           py39hca03da5_0    defaults
pyyaml                    6.0              py39h80987f9_1    defaults
pyzmq                     25.0.2           py39h313beb8_0    defaults
rapidfuzz                 2.13.7           py39h78102c4_0    defaults
readline                  8.2                  h1a28f6b_0    defaults
readme_renderer           24.0             py39hca03da5_0    defaults
reproc                    14.2.4               hc377ac9_1    defaults
reproc-cpp                14.2.4               hc377ac9_1    defaults
requests                  2.28.1           py39hca03da5_1    defaults
requests-toolbelt         0.9.1              pyhd3eb1b0_0    defaults
rfc3986                   1.4.0              pyhd3eb1b0_0    defaults
rich                      13.3.5           py39hca03da5_0    defaults
ruamel.yaml               0.17.21          py39h1a28f6b_0    defaults
ruamel.yaml.clib          0.2.6            py39h1a28f6b_1    defaults
ruamel.yaml.jinja2        0.2.7            py39hca03da5_0    defaults
ruamel_yaml               0.17.21          py39h1a28f6b_0    defaults
send2trash                1.8.0              pyhd3eb1b0_1    defaults
setuptools                67.8.0           py39hca03da5_0    defaults
setuptools-git-versioning 1.13.1           py39hca03da5_0    defaults
setuptools-scm            7.0.4            py39hca03da5_0    defaults
shellingham               1.5.0            py39hca03da5_0    defaults
six                       1.16.0             pyhd3eb1b0_1    defaults
smmap                     4.0.0              pyhd3eb1b0_0    defaults
sniffio                   1.2.0            py39hca03da5_1    defaults
soupsieve                 2.4              py39hca03da5_0    defaults
source-to-image           1.3.1                h51ee2dc_1    ctools
sqlite                    3.41.2               h80987f9_0    defaults
stack_data                0.2.0              pyhd3eb1b0_0    defaults
stdlib-list               0.8.0            py39hca03da5_0    defaults
tapi                      1100.0.11            h8754e6a_1    defaults
terminado                 0.17.1           py39hca03da5_0    defaults
testpath                  0.6.0            py39hca03da5_0    defaults
text-unidecode            1.3                pyhd3eb1b0_0    defaults
tig                       2.5.8                h8a0c2ca_0    defusco
tk                        8.6.12               hb8d0fd4_0    defaults
toml                      0.10.2             pyhd3eb1b0_0    defaults
tomli                     2.0.1            py39hca03da5_0    defaults
tomli-w                   1.0.0              pyhd3eb1b0_0    defaults
tomlkit                   0.11.1           py39hca03da5_0    defaults
toolz                     0.12.0           py39hca03da5_0    defaults
tornado                   6.2              py39h1a28f6b_0    defaults
tox                       3.27.1             pyhd8ed1ab_0    conda-forge
tox-conda                 0.8.4              pyhd8ed1ab_0    conda-forge
tqdm                      4.65.0           py39h86d0a89_0    defaults
traitlets                 5.7.1            py39hca03da5_0    defaults
tree                      2.0.0                h3422bc3_0    conda-forge
trove-classifiers         2023.3.9         py39hca03da5_0    defaults
twine                     3.7.1              pyhd3eb1b0_0    defaults
typer                     0.4.2                    pypi_0    pypi
typing-extensions         4.5.0            py39hca03da5_0    defaults
typing_extensions         4.5.0            py39hca03da5_0    defaults
tzdata                    2023c                h04d1e81_0    defaults
ukkonen                   1.0.1            py39h525c30c_0    defaults
unidecode                 1.2.0              pyhd3eb1b0_0    defaults
urllib3                   1.26.15          py39hca03da5_0    defaults
userpath                  1.7.0              pyhd8ed1ab_0    conda-forge
versioneer                0.28               pyhd8ed1ab_0    conda-forge
virtualenv                20.17.1          py39hca03da5_0    defaults
wcwidth                   0.2.5              pyhd3eb1b0_0    defaults
webencodings              0.5.1            py39hca03da5_1    defaults
websocket-client          0.58.0           py39hca03da5_4    defaults
wget                      1.21.3               hc6d1d07_0    defaults
wheel                     0.38.4           py39hca03da5_0    defaults
xattr                     0.10.1           py39h80987f9_0    defaults
xz                        5.2.10               h80987f9_1    defaults
yaml                      0.2.5                h1a28f6b_0    defaults
yaml-cpp                  0.7.0                hc377ac9_1    defaults
yarl                      1.8.1            py39h1a28f6b_0    defaults
zeromq                    4.3.4                hc377ac9_0    defaults
zipp                      3.11.0           py39hca03da5_0    defaults
zlib                      1.2.13               h03a7124_4    conda-forge
zstandard                 0.19.0           py39h80987f9_0    defaults
zstd                      1.5.5                hd90d995_0    defaults

Additional Context

I've looked at the arguments in https://github.com/conda/conda-lock/issues/432. As the maintainer of conda-project I find value in having the hash in the conda-lock file. The use case is that a user creates a project with locked dependencies. When they re-visit the project several years later conda project install will check that the hash is still valid and install the packages as they were rather than re-lock before installing. But if the environment.yml had changed the user will be shown a warning.

maresb commented 1 year ago

Great detective work!!! We should be able to merge a PR for this quite quickly.

maresb commented 1 year ago

Closed by #450