Condalock files generated by Wave

Hi :slight_smile: I think something is wrong with the condalock files (see my PR Rollback conda by JudithBernett · Pull Request #74 · nf-core/drugresponseeval · GitHub).

The build details are here: Container build report

The conda file itself looks good:

channels:
- conda-forge
- bioconda
dependencies:
- conda-forge::python=3.13.11
- pip
- pip:
  - drevalpy==1.4.1

but the condalock file does not include the drevalpy dependency:

# This file may be used to create an environment using:
# $ conda create --name <env> --file <this file>
# platform: linux-64
@EXPLICIT
https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2#d7c89558ba9fa0495403155b64376d81
https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_16.conda#26c46f90d0e727e95c6c9498a33a09f3
https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2#73aaf86a425cc6e73fcf236a5a46396d
https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_16.conda#6d0363467e6ed84f11435eb309f2ff06
https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_8.conda#51a19bba1b8ebfb60df25cde030b7ebc
https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda#bddacf101bb4dd0e51811cb69c7790e2
https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_16.conda#68f68355000ec3f1d6f26ea13e8f525f
https://conda.anaconda.org/conda-forge/linux-64/icu-78.2-h33c6efd_0.conda#186a18e3ba246eccfc7cff00cd19a870
https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda#edb0dca6bc32e4f4789199455a1dbeb8
https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda#4a13eeac0b5c8e5b8ab496e6c4ddd829
https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45-default_hbd61a6d_105.conda#3ec0aa5037d39b06554109a01e6fb0c6
https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.3-hecca717_0.conda#8b09ae86839581147ef2e5c5e229d164
https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h9ec8514_0.conda#35f29eec58405aaf55e01cb470d8c26a
https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_2.conda#1a580f7796c7bf6393fddb8bbbde58dc
https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb9d3cd8_0.conda#c7e925f37e3b40d893459e625f6a53f1
https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.2-hf4e2dac_0.conda#da5be73701eecd0e8454423fd6ffcf30
https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda#db409b7c1720428638e7c0d509d3e1b5
https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda#47e340acb35de30501a76c7c799c41d7
https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.0-h26f9b46_0.conda#9ee58d5c534af06558933af3c845a780
https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda#94305520c52a4aa3f6c2b1ff6008d9f8
https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda#d7d95fc8287ea7bf33e0e7116d2b95ec
https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_ha0e22de_103.conda#86bc20552bf46075e3d92b67f089172d
https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda#ad659d0a2b3e47e38d829aa8cad2d610
https://conda.anaconda.org/conda-forge/linux-64/python-3.13.11-hc97d973_100_cp313.conda#0cbb0010f1d8ecb64a428a8d4214609e
https://conda.anaconda.org/conda-forge/noarch/pip-25.3-pyh145f28c_0.conda#bf47878473e5ab9fdb4115735230e191
https://conda.anaconda.org/conda-forge/linux-64/procps-ng-4.0.4-haa1a288_0.conda#df1234784d50c2133419dc695dc65f99

Is there something I am doing wrong here?
Best,

Judith

That’s expected I think, though I’ve not really thought about it before. The conda lock files pin the conda dependencies. You’re installing devrelpy via pip in your environment file though, so it’s not a conda dep, so it’s not in the lock file

Ahh, I see. Is there a way to also record the pip dependencies in the conda lock file? Because while drevalpy is now available on Bioconductor, it has an optional ray dependency that is recorded in the bioconda recipe ( bioconda-recipes/recipes/drevalpy/meta.yaml at e198d0b90e4c92949c4407c785d88585e75af46c · bioconda/bioconda-recipes · GitHub ).

Ray is not available for arm:

so if I try to build an arm wave container from conda, the build will fail (for amd it works, but I’d like arm support, too). Because the dependency is optional in my pyproject.toml, ray is not automatically installed when running pip install drevalpy, so the wave build is successful from pip. So I see two options:

  1. adapt the Bioconda recipe
  2. adapt the condalock file

Maybe then 1 is just easier?

Hmm, I’m not really sure. Claude gave me this advice. Maybe worth having a play around with building from Conda locally? If you can make it work locally but not via Wave then let me know and we can dig into what differences there are between the two build setups.


Yes, conda-lock does support pip packages, but there are a couple of things to check:

1. Correct environment.yml structure

The pip packages need to be nested under pip as a dependency item:

dependencies:
  - python=3.11
  - pip
  - pip:
    - some-pip-package
    - another-package>=1.0

Note that pip itself must be listed as a conda dependency before the pip: section.

2. Enable pip support in conda-lock

By default, conda-lock should process pip dependencies, but you can explicitly enable it:

conda-lock --pip-support

Or in a pyproject.toml or conda-lock.yml config:

# conda-lock.yml
pip_support: true

3. Check the output format

Pip packages appear differently in the lock file. In the unified conda-lock.yml format, they show up with manager: pip rather than manager: conda. If you’re generating platform-specific .lock files, pip packages are listed in a separate section.

4. Limitations

A few things to be aware of:

  • Pip packages won’t have the same strict reproducibility as conda packages (pip doesn’t lock transitive dependencies the same way)
  • Some pip packages with complex build requirements may not resolve cleanly
  • VCS dependencies (git+https://…) have limited support

If packages are still missing, check that your pip package names are valid on PyPI and that there are no typos. You can also run with -v for verbose output to see what’s happening during the solve.

What does your current environment.yml look like?