## Nix Recipe for Python Projects

This is a quick and easy recipe to add a `default.nix` to any Python project with a `requirements.txt` file:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40

    with import <nixpkgs> { };

    let
      pythonPackages = python311Packages;
    in pkgs.mkShell rec {
      name = "impurePythonEnv";
      venvDir = "./.venv";
      buildInputs = [
        # A python interpreter including the 'venv' module is required to bootstrap
        # the environment.
        pythonPackages.python

        # This execute some shell code to initialize a venv in $venvDir before
        # dropping into the shell
        pythonPackages.venvShellHook

        # Those are dependencies that we would like to use from nixpkgs, which will
        # add them to PYTHONPATH and thus make them accessible from within the venv.
        pythonPackages.numpy
        pythonPackages.requests

        # In this particular example, in order to compile any binary extensions they may
        # require, the python modules listed in the hypothetical requirements.txt need
        # the following packages to be installed locally:
        taglib
        openssl
        git
        libxml2
        libxslt
        libzip
        zlib
      ];

      # Now we can execute any commands within the virtual environment.
      # This is optional and can be left out to run pip manually.
      postShellHook = ''
        pip install -r requirements.txt
      '';

    }

Now, you will get a clean environment by running:

    1

    nix-shell

## Related content

## Bridging RDF, JSON-LD and Dataclasses

## uv - One rust tool to rule all pythons

## Progress bars in python

## Proxies with Apache and python

## Publishing on PyPi