[英]Python Packaging: Creating a dependency on a `conda-forge` package in `conda` `meta.yaml` file
I am writing a package for conda-forge
and needed to specify a dependency on another conda-forge
dependency.我正在为 conda
conda-forge
forge 编写 package 并且需要指定对另一个conda-forge
-forge 依赖项的依赖项。 Essentially, I need to install a pinned version of the conda-forge
gdal
package, because it actually compiles the version of libtiff
that supports BIGTIFF files....本质上,我需要安装 conda
conda-forge
forge gdal
package 的固定版本,因为它实际上编译了支持 BIGTIFF 文件的libtiff
版本....
Now if I was installing gdal
into a conda
environment, I would write something like.现在,如果我将
gdal
安装到conda
环境中,我会写类似的东西。
conda install -c conda-forge gdal=2.4.4
I would to get this version of gdal=2.4.4
from conda-forge
installed when installing the package.在安装 package 时,我会从
conda-forge
forge 安装此版本的gdal=2.4.4
。 Now in the meta.yaml
file, I can specify package dependencies like so, but I did not see how to specify a URL to a tar file, or whatever would work.现在在
meta.yaml
文件中,我可以像这样指定 package 依赖项,但我没有看到如何将 URL 指定到 tar 文件中。
{% set version = "0.0.1" %}
package:
name: mypackage
version: {{ version }}
source:
url: https://github.com/myrepo/{{ version }}.tar.gz
sha256: ****6a63
build:
number: 1
skip: true # [win and py27]
entry_points:
- mycli = mypackage.main:main
requirements:
build:
- python
-
host:
- python
- pip
- numpy
- gdal # <----- want to specify from conda-forge
run:
- python
- gdal # <----- want to specify from conda-forge
Any suggestions about how to do this would be appreciated.任何有关如何执行此操作的建议将不胜感激。
I don't think it's possible to specify the channel in meta.yaml
.我认为不可能在
meta.yaml
中指定频道。 The following issue is still unresolved in the conda-build issue tracker: https://github.com/conda/conda-build/issues/532 conda-build 问题跟踪器中仍未解决以下问题: https://github.com/conda/conda-build/issues/532
As a workaround, if you know the exact version of gdal
that you need, you can specify the exact version and "build string" in the recipe.作为一种解决方法,如果您知道所需的
gdal
的确切版本,则可以在配方中指定确切的版本和“构建字符串”。
The only annoying thing is that you'll have to list gdal
once for every combination of platform and python version your recipe needs to support.唯一令人讨厌的是,您必须为您的配方需要支持的平台和 python 版本的每个组合列出一次
gdal
。
requirements:
build:
- python
-
host:
- python
- pip
- numpy
- gdal 2.4.4 py36h02fde04_1 # [osx and py==36]
- gdal 2.4.4 py37h622575a_1 # [osx and py==37]
- gdal 2.4.4 py38h57202bd_1 # [osx and py==38]
- gdal 2.4.4 py36hbb8311d_1 # [linux and py==36]
- gdal 2.4.4 py37hf8c3989_1 # [linux and py==37]
- gdal 2.4.4 py38hfe926b7_1 # [linux and py==38]
run:
- python
- gdal 2.4.4 py36h02fde04_1 # [osx and py==36]
- gdal 2.4.4 py37h622575a_1 # [osx and py==37]
- gdal 2.4.4 py38h57202bd_1 # [osx and py==38]
- gdal 2.4.4 py36hbb8311d_1 # [linux and py==36]
- gdal 2.4.4 py37hf8c3989_1 # [linux and py==37]
- gdal 2.4.4 py38hfe926b7_1 # [linux and py==38]
(I copied those from the gdal package listing on the conda-forge channel .) (我从conda-forge 频道上的 gdal package 列表中复制了这些内容。)
BTW, since you mentioned that the real important difference for you is libtiff
, then should you be pinning libtiff
instead of gdal
?顺便说一句,既然您提到对您来说真正重要的区别是
libtiff
,那么您应该固定libtiff
而不是gdal
吗? Or maybe both?或者两者兼而有之?
Edit:编辑:
It would be nice to avoid repeating the whole list of build strings in the host
and run
sections.避免在
host
和run
部分中重复整个构建字符串列表会很好。
As you suggested in the comments, one option is to define the build string in conda_build_config.yaml
:正如您在评论中建议的那样,一种选择是在
conda_build_config.yaml
中定义构建字符串:
# conda_build_config.yaml
gdal_build:
- py36h02fde04_1 # [osx and py==36]
- py37h622575a_1 # [osx and py==37]
- py38h57202bd_1 # [osx and py==38]
- py36hbb8311d_1 # [linux and py==36]
- py37hf8c3989_1 # [linux and py==37]
- py38hfe926b7_1 # [linux and py==38]
# meta.yaml
requirements:
build:
- python
-
host:
- python
- pip
- numpy
- gdal 2.4.4 {{ gdal_build }}
run:
- python
- gdal 2.4.4 {{ gdal_build }}
Another option is to define a lookup table in a jinja variable, directly in meta.yaml
.另一种选择是在 jinja 变量中定义查找表,直接在
meta.yaml
中。 This is slightly uglier, perhaps, but at least all of logic is contained in a single file.这可能有点难看,但至少所有逻辑都包含在一个文件中。 I'm not sure which to prefer.
我不确定更喜欢哪个。
{% set platform = 'linux' if linux else 'osx' if osx else 'win' %}
{%
set gdal_builds = {
'osx': {
36: 'py36h02fde04_1',
37: 'py37h622575a_1',
38: 'py38h57202bd_1',
},
'linux': {
36: 'py36hbb8311d_1',
37: 'py37hf8c3989_1',
38: 'py38hfe926b7_1',
}
}
%}
requirements:
build:
- python
-
host:
- python
- pip
- numpy
- gdal 2.4.4 {{ gdal_builds[platform][py] }}
run:
- python
- gdal 2.4.4 {{ gdal_builds[platform][py] }}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.