2

我想通过 conda 分发一个包的多个版本。具体来说,我想做这样的事情:

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

诀窍是我希望“最新”或默认包是没有-dev. 据我了解,conda install <package>没有版本号将安装最新版本。就我而言,那将永远是-dev. 是否可以将默认设置为特定版本号?

4

1 回答 1

3

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是 BEFORE 1.2。(也许你已经知道了,但我认为这并不明显。)

$ python
>>> from conda.models.version import VersionOrder
>>> VersionOrder('1.2.dev') < VersionOrder('1.2')
True
于 2020-12-06T19:11:59.897 回答