/poetry2nix

Convert poetry projects to nix automagically [maintainer=@adisbladis]

Primary LanguageNix

poetry2nix

poetry2nix turns Poetry projects into Nix derivations without the need to actually write Nix expressions. It does so by parsing pyproject.toml and poetry.lock and converting them to Nix derivations on the fly.

Usage

poetry2nix has 2 main use-cases:

  • mkPoetryApplication: For building poetry based Python applications.
  • mkPoetryEnv: For creating a python environment with the dependencies of a poetry.lock file.

Notes

Whenever possible poetry2nix uses source archives to install Python dependencies. Some packages however only provide binaries in the form of .whl files. If no source archives are provided, poetry2nix tries to select an appropriate manylinux binary and automatically adds the required dependencies to the python package. Note that for manylinux packages to work you need to use very recent nixpkgs.

Examples

mkPoetryApplication

poetry2nix.mkPoetryApplication {
    src = lib.cleanSource ./.;
    pyproject = ./pyproject.toml;
    poetrylock = ./poetry.lock;
    python = python3;
}

See ./pkgs/poetry/default.nix for a working example.

mkPoetryEnv

poetry2nix.mkPoetryEnv {
    poetrylock = ./poetry.lock;
    python = python3;
}

The above expression returns a package with a python interpreter and all packages specified in the poetry.lock lock file. See ./tests/env/default.nix for a working example.

Contributing

Contributions to this project are welcome in the form of GitHub PRs. Please consider the following before creating PRs:

  • This project uses nixpkgs-fmt for fomatting the Nix code. You can use `nix-shell --run "nixpkgs-fmt ." to format everything.
  • If you are planning to make any considerable changes, you should first present your plans in a GitHub issue so it can be discussed.
  • If you add new features please consider adding tests.

License

poetry2nix is released under the terms of the MIT license.