Creating Nix-expressions with buildout
The greatest blocker for using Nix or complex Python projects like Plone, I think, is the work needed to make all required Python-packages (usally very specific versions) available in nix expression. Also, in the most extreme, that would require every version for every package in PyPI in nixpkgs.
Announcing collective.recipe.nix
collective.recipe.nix is my try for generating nix expressions for arbitrary Python projects. It’s an experimental buildout recipe, which re-uses zc.recipe.egg for figuring out all the required packages and their dependencies.
Example of usage
At first, bootstrap your environment by defining python with buildout in
./default.nix
:
with import <nixpkgs> {}; {
myEnv = stdenv.mkDerivation {
name = "myEnv";
buildInputs = [
pythonPackages.buildout
];
shellHook = ''
export SSL_CERT_FILE=~/.nix-profile/etc/ca-bundle.crt
'';
};
}
And example ./buildout.cfg
:
[buildout]
parts =
i18ndude
releaser
robot
sphinx
[i18ndude]
recipe = collective.recipe.nix
eggs = i18ndude
[releaser]
recipe = collective.recipe.nix
eggs = zest.releaser[recommended]
[robot]
recipe = collective.recipe.nix
eggs = robotframework
propagated-build-inputs =
robotframework=robotframework-debuglibrary
robotframework=robotframework-selenium2library
robotframework=robotframework-selenium2screenshots
[sphinx]
recipe = collective.recipe.nix
eggs = sphinx
propagated-build-inputs =
sphinx=sphinxcontrib_robotframework[docs]
Run the buildout:
$ nix-shell --run buildout
The recipe generates three kind of expressions:
- default [name].nix usable with nix-shell
- buildEnv based [name]-env.nix usable with nix-build
- buildPythonPackage based [name]-package.nix usable with nix-env -i -f
So, now you should be able to run zest.releaser with:
$ nix-shell releaser.nix --run fullrelease
You could also build Nix-environment with symlinks in folder
./releaser
or into a Docker
image
with:
$ nix-build releaser-env.nix -o releaser
Finally, you could install zest.releaser into your current Nix-profile with:
$ nix-env -i -f releaser-zest_releaser.nix