我想通过 conda 分发一个包的多个版本。具体来说,我想做这样的事情:
...
package-v1.2-dev
package-v1.2
package-v1.1-dev
package-v1.1
package-v1.0
诀窍是我希望“最新”或默认包是没有-dev
. 据我了解,conda install <package>
没有版本号将安装最新版本。就我而言,那将永远是-dev
. 是否可以将默认设置为特定版本号?
我想通过 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 包版本不能包含-
字符,因此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
软件包的用户将有两种选择:
他们可以dev
在命令行上指定标签:
conda install -c mychannel/label/dev mypackage
或者
他们可以将您的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