Укажите выбранную версию пакета conda по умолчанию через conda-forge / conda-install

#continuous-integration #conda #conda-build #conda-forge

#непрерывная интеграция #conda #conda-build #conda-forge

Вопрос:

Я хотел бы распространять несколько версий пакета через conda. В частности, я хотел бы сделать что-то вроде этого:

 ...
package-v1.2-dev
package-v1.2
package-v1.1-dev
package-v1.1
package-v1.0
 

Хитрость в том, что я хотел бы, чтобы «последним» или пакетом по умолчанию были версии выпуска, которых нет -dev . Как я понимаю, conda install <package> без номера версии будет установлена новейшая сборка. В моем случае так будет всегда -dev . Возможно ли установить по умолчанию определенный номер версии?

Ответ №1:

Вы можете добиться этого, указав пользовательскую «метку» для своих dev пакетов. Продолжайте использовать main метку по умолчанию для своих пакетов выпуска, но используйте неосновную метку (например dev ) для других пакетов.

Во-первых, краткое замечание о номерах версий: версии пакета conda не должны содержать - символ, поэтому v1.2-dev это недопустимая версия. Для следующих примеров я буду использовать v1.2.dev .


Вот как загрузить ваши пакеты:

 anaconda upload mypackage-v1.2.tar.bz2
anaconda upload --labels dev mypackage-v1.2.dev.tar.bz2
 

(Вы также можете изменять метки для существующих пакетов через свою учетную запись на http://anaconda.org вебсайт.)

По умолчанию ваши пользователи будут загружать только ваши основные пакеты. У пользователей, которым нужны dev пакеты, будет два варианта:

  1. Они могут указать dev метку в командной строке:
     conda install -c mychannel/label/dev mypackage
     

или

  1. Они могут добавить ваш dev ярлык в свою .condarc конфигурацию
     # .condarc
    channels:
      - mychannel/label/dev # dev label
      - mychannel           # main label only
      - conda-forge
      - defaults
     

    И тогда нет необходимости указывать канал в командной строке:

     conda install mypackage
     

PS — Вот дополнительная заметка о том, что вы написали выше:

Как я понимаю, conda install <package> без номера версии будет установлена новейшая сборка

Просто чтобы уточнить, он устанавливает не «новейшую» в хронологическом смысле, а самую высокую совместимую версию в соответствии с логикой conda VersionOrder . Эта логика разработана так, чтобы быть в значительной степени совместимой с соответствующими соглашениями Python (например, PEP440 и другими), но с некоторыми возможностями для совместимости с соглашениями других языков.

Пожалуйста, обратите внимание: что касается conda (и PEP440), 1.2.dev то она ПРЕДШЕСТВУЕТ 1.2 . (Возможно, вы это уже знали, но я не считаю это очевидным.)

 $ python
>>> from conda.models.version import VersionOrder
>>> VersionOrder('1.2.dev') < VersionOrder('1.2')
True
 

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

1. Спасибо за дополнительную информацию о заказе версий. По-видимому, я неправильно определял версии своих проектов! Я считаю v1.2.dev , что это ветвь разработчика после v1.2 того, как она помечена и выпущена. Похоже, что соглашение Python заключается в том, что v1.2.dev после v1.1 выпуска и находится v1.2 в разработке.

2. Да, это определенно не очевидно, ИМХО. Я удивился, когда впервые увидел это. PEP440 присваивает специальные значения некоторым идентификаторам : [N!]N(.N)*[{a|b|rc}N][.postN][.devN]

3. К вашему сведению, для интеграции с Conda-forge: conda-forge.org/docs/maintainer /…

4. Ах, я не знал об этой функции. Спасибо!