Conda 构建包与特定 python 版本兼容

Conda build package to be compatible with specific python version

我正在尝试创建一个 conda 包,它应该与大于或等于 3.7 的所有 python 版本兼容。

我在 conda.recipe/meta.yaml 中指定了此要求:

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

对于我的构建命令,我首先激活了一个Python 3.7 conda环境,然后我指定构建命令应该使用相同的环境,我还指定构建命令应该使用Python 3.7 只是为了安全起见:

$ 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

conda.recipy/meta.yaml 中的构建步骤也使用相同的环境:

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'

问题

运行 上面的命令创建了这个文件:

my-package-1.1.0-py310_0.tar.bz2

我不明白为什么 py310 在软件包名称中,我做了我能想到的一切以使其也与 3.7 兼容。

以下是我尝试使用 python 3.7 和我创建的包创建环境时发生的情况(将 tar.bz2 文件上传到我的 conda 存储库后):

$ 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

但是如果我在创建环境时没有指定 3.7 它工作正常,但创建一个 3.10 的环境。

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

问题

如何使 my-package 与 Python 3.7 兼容?

经过大量无效的研究和无休止的反复试验,我发现我应该通过将 noarch: python 添加到我的 meta.yaml 来使我的包不特定于任何 python 版本:

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'