Hi,
Lately I've been replacing my application's slew of custom build scripts with conda packages [1]. Each package I need falls into one of these three categories:
1) The package already exists in conda's "defaults" channel, and I can use it as-is (woo-hoo!).
2) The package doesn't exist in "defaults", so I've written my own recipe and uploaded the package to binstar.
3) The package already exists in "defaults", but I can't use it due to some incompatibility with the rest of my stack. I need to write my own recipe for that package, and use THAT version ONLY.
My question is about the best way to deal with my packages in category #3.
For example, the default VTK package in conda "defaults" doesn't include pyqt bindings, which I need. Fortunately, it was easy to modify the VTK recipe from the conda-recipes repo to suit my needs. I built my own version of VTK and uploaded it to binstar, with a special build string ("with_pyqt").
How can I make sure that only MY vtk package is used whenever vtk is pulled in by one of the packages in my stack?
The first thing I tried was providing an exact (explicit) package specification in the meta.yaml files that refer to vtk:
requirements:
build:
- vtk 5.10.1 with_pyqt
... but it turns out that "exact" package specifications introduce complications, mostly related to a bug in conda [2].
So, it seems that just requiring my special build string in meta.yaml is not an option. My current workaround is to use a kooky version number in lieu of a special build string:
requirements:
build:
- vtk 5.10.1.99
This way, there's no chance I'll accidentally get the "official" vtk package -- I'll always get the special version from MY channel.
(BTW, The A.B.C.D version format counts as a "rational" version in conda.verlib.)
Is there a better way to ensure that a package is always pulled from my channel, never accidentally downloaded from the "defaults" channel?
Best regards,
Stuart