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'
我正在尝试创建一个 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'