Как создавать рецепты conda на основе аргументов, переданных с помощью команды conda build

#python #conda #conda-build

#python #conda #conda-build

Вопрос:

Я хотел бы иметь единый рецепт для сборки всех моих отдельных пакетов python в моем репозитории. (Здесь их несколько.) Вот как структурирован репозиторий:

 repo
|--package1
   |--setup.py
|--package2
   |--setup.py
|--package3
   |--setup.py
|--recipe
   |--meta.yaml
 

Я хотел бы собрать каждый пакет следующим образом:

 conda build recipe/ --variants "{'package':['package1','package2','package3']}"
 

Это должно позволить мне получить пакет и соответствующим образом указать путь в meta.файл yaml:

 source:
  path: ../{{ package }}
 
  1. Можно ли получить доступ к данным вариантов из рецепта?
  2. Если нет, есть ли альтернативы для достижения этой цели?

Комментарии:

1. Есть способ добиться этого, используя варианты рецептов и «селекторы» внутри meta.yaml . Но я не рекомендую это. Более стандартная схема заключается в том, чтобы просто поддерживать отдельный рецепт для каждого пакета, расположенный в собственном исходном коде пакета. Например, repo/package1/conda-recipe , и т.д. repo/package2/conda-recipe Затем вы можете собрать их все сразу с помощью conda build package1/conda-recipe package2/conda-recipe ... .

2. Причина, по которой ваша схема не рекомендуется, заключается в том, что обычно разные упаковки будут иметь существенно разные рецепты. Например, их номера версий и требования к сборке обычно будут отличаться. То же самое для всего , что есть в about разделе meta.yaml . Теоретически, можно было бы сделать ВСЕ поля meta.yaml выборочно включенными / отключенными с помощью «селекторов» и / или шаблонов jinja, но результат будет излишне сложным. Проще вести отдельный рецепт для каждой упаковки. В идеале вы должны хранить каталог рецептов в собственном исходном коде пакета.