Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Conda build package to be compatible with specific python version

I am trying to create a conda package which should be compatible with all python versions greater than or equal to 3.7.

I specified this requirement in my conda.recipe/meta.yaml:

requirements:
  host:
    - python >=3.7
    - pip
  run:
    - python >=3.7
    - importlib-resources >=1.4.0
    - ...

For my build command, I first activated a Python 3.7 conda environment, then I specified the build command should use the same environment, and I also specified that the build command should use Python 3.7 just to be safe:

$ CONDA_ENV=/path/to/py3.7/conda/env
$ conda create --yes -p $CONDA_ENV python=3.7 conda-build conda-verify importlib-resources>=1.4.0 # ...remaining reqs
$ conda activate $CONDA_ENV
$ conda build --python=3.7 -p $CONDA_ENV /path/to/package/dir

The build step in conda.recipy/meta.yaml too uses this same environment:

build:
  script: bash -c 'source ~/.bashrc && conda activate /path/to/py3.7/conda/env && python -m pip install --no-deps --ignore-installed -vv /path/to/package/dir'

The problem

Running the above commands creates this file:

my-package-1.1.0-py310_0.tar.bz2

I don't get why py310 is in the package name, I did everything I can think of to make it compatible with 3.7 as well.

Here is what happens when I try to create an environment with both python 3.7 and my created package (after uploading the tar.bz2 file to my conda repo):

$ conda create -p ~/temp/conda python=3.7 my-package
Collecting package metadata (current_repodata.json): done
Solving environment: failed with repodata from current_repodata.json, will retry with next repodata source.
Collecting package metadata (repodata.json): done
Solving environment: \
Found conflicts! Looking for incompatible packages.
This can take several minutes.  Press CTRL-C to abort.
failed

UnsatisfiableError: The following specifications were found to be incompatible with each other:

Output in format: Requested package -> Available versions

Package python conflicts for:
python=3.7
my-package -> python[version='>=3.10,<3.11.0a0']
my-package -> importlib-resources[version='>=1.4.0'] -> python[version='2.7.*|3.5.*|3.6.*|>=2.7,<2.8.0a0|>=3.8,<3.9.0a0|>=3|>=3.6|>=3.7|>=3.6,<3.7.0a0|>=3.7,<3.8.0a0|>=3.5,<3.6.0a0|3.4.*|>=3.9,<3.10.0a0|3.10.*']
The following specifications were found to be incompatible with your system:

  - feature:/linux-64::__glibc==2.27=0
  - feature:|@/linux-64::__glibc==2.27=0

Your installed version is: 2.27

But if I don't specify 3.7 when creating the environment it works fine, but creates an environment with 3.10.

$ conda create -p ~/temp/conda python my-package

Question

How can I make my-package compatible with Python 3.7?

like image 502
Abraham Murciano Benzadon Avatar asked Jun 20 '26 07:06

Abraham Murciano Benzadon


1 Answers

After much unproductive research an unending amounts of trial and error, I found that I should have made my package not specific to any python version by adding noarch: python to my meta.yaml:

build:
  noarch: python
  script: bash -c 'source ~/.bashrc && conda activate /path/to/py3.7/conda/env && python -m pip install --no-deps --ignore-installed -vv /path/to/package/dir'
like image 94
Abraham Murciano Benzadon Avatar answered Jun 22 '26 22:06

Abraham Murciano Benzadon