-
Notifications
You must be signed in to change notification settings - Fork 423
Migrating numpy x.x to Conda build 3's pin_run_as_build
The x.x syntax began in https://github.com/conda/conda-build/pull/573. The core idea with this syntax was that package builders often need a way to say "pin the runtime dependency to whatever version was present at build time." Compared with the x.x syntax (which conda-build 3 supports fully), conda-build 3 has syntax that generalizes the behavior to all packages, and adds additional configurability.
Given a recipe like this:
package:
name: abc
version: 123
requirements:
build:
- numpy x.x
run:
- numpy x.x
The equivalent recipe using conda-build 3's new syntax will look like this:
package:
name: abc
version: 123
requirements:
build:
- numpy
run:
- {{ pin_compatible('numpy') }}
You may also see recipes that have x.x
only in the build requirements. This is functionally equivalent to having it in both build and run. The conda-build 3 syntax to support it is exactly the same as above.
package:
name: abc
version: 123
requirements:
build:
- numpy x.x
run:
- numpy
The customizability that conda-build 3 adds consists of a syntax to specify the exactness of the constraint. For example, the default behavior is to constrain >= the exact version used at build time, and < the next major version. Our code above would thus result in a pin like numpy >=1.11.2,<2
. We could tweak that, though:
package:
name: abc
version: 123
requirements:
build:
- numpy
run:
- {{ pin_compatible('numpy', min_pin='x.x', max_pin='x.x') }}
This would now give us a constraint like numpy >=1.11,<1.12
. More docs on this are available at https://conda.io/docs/building/variants.html#customizing-compatibility
x.x
pins generally should never exist in a "cross capable" recipe (one with a requirements/host section). For those recipes, the pin_compatible jinja2 function is aware of the host section, and should do the right thing.
package:
name: abc
version: 123
requirements:
host:
- numpy
run:
- {{ pin_compatible('numpy', min_pin='x.x', max_pin='x.x') }}