Howto get a nix shell with poetry 1.1.7

I am trying to get a nix shell with poetry 1.1.7 using flakes.

However, if I use poetry from python packages like in

{
  description = "my flake";

  inputs = {
    nixpkgs.url = "github:nixos/nixpkgs";
    flake-utils.url = "github:numtide/flake-utils";
  };

  outputs = { self, nixpkgs, flake-utils }: (flake-utils.lib.eachSystem [ "x86_64-linux" ] (system:
    let
      pkgs = nixpkgs.legacyPackages.${system};
    in
    rec {
      packages = {
        pythonEnv = pkgs.python39.withPackages (ps: with ps; [
          numpy
          poetry
        ]);
      };

      defaultPackage = packages.pythonEnv; 
      devShell = pkgs.mkShell {
        buildInputs = [
          packages.pythonEnv
        ];
      };
    }));
}

I get a collision

nix shell
error: builder for ‘/nix/store/hmghq2h10h6n78l9pp9f43wzxfxk2xii-python3-3.9.6-env.drv’ failed with exit code 25;
last 1 log lines:
> collision between /nix/store/3fkqxdvs48i7s6sa7vrfis8z31j5gvk4-python3.9-poetry-core-1.0.3/lib/python3.9/site-packages/poetry/__pycache__/__init__.cpython-39.pyc' and /nix/store/q5z25msbr6p4fpp7r544qlmvgvn868ia-python3.9-poetry-1.1.7/lib/python3.9/site-packages/poetry/pycache/init.cpython-39.pyc’
For full logs, run ‘nix log /nix/store/hmghq2h10h6n78l9pp9f43wzxfxk2xii-python3-3.9.6-env.drv’.

If I put pkgs.poetry in buildInputs, its version is 1.1.5.

Can anyone help?

1 Like

Same error as you with nix flakes. On the other hand, this seems to work

            buildInputs = [
-             pkgs.python39.withPackages(ps: with ps; [poetry])
+             pkgs.python39
+             pkgs.python39Packages.poetry
            ]

See my answer in Python development with Poetry, with nix supplying Python - #11 by adisbladis.

I believe you want python*Packages.poetry in your development shell ~0% of the time.

1 Like