nixnix-flake

Nix Flake get a specific python version


I am trying to make a Nix flake which will use poetry2nix for building a poetry project the code is

{
 description = "searx : flake";

  inputs.nixpkgs.url = github:NixOS/nixpkgs/nixos-20.03;

  outputs = { self, nixpkgs }: {

    defaultPackage.x86_64-linux =
      with import nixpkgs { system = "x86_64-linux";
      buildInputs = [
      nixpkgs.python39
      nixpkgs.git
      nixpkgs.openssl
      nixpkgs.python39Packages.pip
      nixpkgs.uwsgi
      nixpkgs.python39Packages.virtualenv
      nixpkgs.poetry
     ];
 };


pkgs.poetry2nix.mkPoetryApplication {
  projectDir = ./.;
      src = pkgs.fetchgit {
        url = "https://github.com/searx/searx.git";
        rev = "ae122ea943f77600fd97556503c483dcd92e1e63";
        sha256 = "sIJ+QXwUdsRIpg6ffUS3ItQvrFy0kmtI8whaiR7qEz4=";
      };


};
  };

However the Nix flake starts pulling python3.7 and breaks with following error

ERROR: Could not find a version that satisfies the requirement importlib-metadata; python_version < "3.8" (from click==8.0.1) (from versions: none)
       > ERROR: No matching distribution found for importlib-metadata; python_version < "3.8" (from click==8.0.1)

Equivalent default.nix pulls python 3.9 and builds successfully. I believe if flake could be pinned to python3.9 it will be able to build this. Is this possible?


Solution

  • You can pass another python to mkPoetryApplication.

    pkgs.poetry2nix.mkPoetryApplication {
      projectDir = ./.;
      python = pkgs.python39;
      # ... your code ...
    }