VC features

Ullrich Koethe edited this page Jan 15, 2016 · 2 revisions

Beginning roughly in the second half of 2015, Continuum began building Windows packages with features as a means of keeping the Visual Studio version used to build packages uniform across a given Python version. Mixing runtime versions is generally a no-no (more info at http://stevedower.id.au/blog/building-for-python-3-5/ )

The way this works is the following:

Providing features

build:
    features:
        - vc9                [win and py27]
        - vc10               [win and py34]
        - vc14               [win and py35]

Note that different features here are chosen by selector. At any time, no environment should have more than one vc version (and thus, one python version) installable. You can, however, have other features active, such as MKL.

How features get activated

Presently, only the Python package tracks features. It does so with code like (example from Python 3.5):

 build:
     track_features:
         - vc14           [win]

For this reason, any code that depends on Python also tracks this feature. Different versions of Python track different features, as appropriate. As a result, you'll see recipes sometimes depending on Python as a build-time dependency when Python isn't actually used to build a package:

requirements:
    build:
        - python    [win]

A key indicator that you've forgotten this dependency is if your package fails to have a string like "vc9" in its output filename.

Templating

Users have suggested that Conda's Jinja2 support makes this much nicer to use, and also easier to maintain: https://github.com/conda/conda-recipes/pull/362#issuecomment-149982478. More detailed documentation and a request for comment can be found in issue https://github.com/conda/conda/issues/1959.

This needs further documentation - we welcome PRs and examples.