通过 conda-forge / conda-install 指定所选默认版本的 conda 包

Specify a chosen default version of conda package through conda-forge / conda-install

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

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

诀窍是我想让“最新”或默认包成为没有 -dev 的发行版本。据我了解,没有版本号的 conda install <package> 将安装最新版本。在我的例子中,那将永远是 -dev。是否可以将默认设置为特定版本号?

您可以通过为 dev 包指定自定义“标签”来实现此目的。继续为您的发布包使用默认的 main 标签,但为其他包使用非主标签(例如 dev)。

首先,关于版本号的快速说明:conda 包版本 must not contain the - character,因此 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 -- 这是关于您在上面写的内容的附注:

As I understand it, conda install <package> without a version number will install the newest build

澄清一下,它不会安装按时间顺序排列的“最新”版本,而是根据 conda's VersionOrder logic. That logic is designed to be largely compatible with relevant Python conventions (e.g. PEP440 和其他人)安装的最高兼容版本,但具有与其他语言约定兼容的一些功能,也是。

请注意: 就 conda(和 PEP440)而言,1.2.dev1.2 之前。 (也许你已经知道了,但我认为这并不明显。)

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