I'd like to distribute multiple versions of a package through conda. Specifically, I'd like to do something like this:
...
package-v1.2-dev
package-v1.2
package-v1.1-dev
package-v1.1
package-v1.0
The trick is that I'd like to have the "latest" or default package be the release versions that do not have -dev
. As I understand it, conda install <package>
without a version number will install the newest build. In my case, that will always be -dev
. Is it possible to make the default a specific version number?
You can achieve this by specifying a custom "label" for your dev
packages. Keep using the default main
label for your release packages, but use a non-main label (e.g. dev
) for the other packages.
First, a quick note about version numbers: conda package versions must not contain the -
character, so v1.2-dev
is not a valid version. For the following examples, I'll use v1.2.dev
.
Here's how to upload your packages:
anaconda upload mypackage-v1.2.tar.bz2
anaconda upload --label dev mypackage-v1.2.dev.tar.bz2
(You can also manipulate the labels for existing packages via your account on the http://anaconda.org website.)
By default, your users will only download your main packages. Users who want the dev
packages will have two choices:
They can specify the dev
label on the command-line:
conda install -c mychannel/label/dev mypackage
OR
They can add your dev
label to their .condarc
config
# .condarc
channels:
- mychannel/label/dev # dev label
- mychannel # main label only
- conda-forge
- defaults
And then there's no need to specify the channel on the command-line:
conda install mypackage
PS -- Here's a side note about something you wrote above:
As I understand it,
conda install <package>
without a version number will install the newest build
Just to clarify, it doesn't install the "newest" in chronological sense, but rather the highest compatible version according to conda's VersionOrder
logic. That logic is designed to be largely compatible with relevant Python conventions (e.g. PEP440 and others), but with some affordances for compatibility with other languages' conventions, too.
Please note: As far as conda (and PEP440) is concerned, 1.2.dev
comes BEFORE 1.2
. (Maybe you already knew that, but I don't consider it obvious.)
$ python
>>> from conda.models.version import VersionOrder
>>> VersionOrder('1.2.dev') < VersionOrder('1.2')
True