#+title: Environnement python avec nix
#+filetags: #nix python

* Projet en Python
[[https://nixos.wiki/wiki/Python#Package_and_development_shell_for_a_python_project][Instructions simples ici]]
Il faut donc setup.py:

#+begin_src python
#!/usr/bin/env python

from setuptools import setup, find_packages

setup(name='demo-flask-vuejs-rest',
      version='1.0',
      # Modules to import from other scripts:
      packages=find_packages(),
      # Executables
      scripts=["web_interface.py"],
     )
#+end_src

Et 2 fichiers .nix, le premier pour les dépendances

#+begin_src sh
{ lib, python3Packages }:
with python3Packages;
buildPythonApplication {
  pname = "demo-flask-vuejs-rest";
  version = "1.0";

  propagatedBuildInputs = [ flask ];

  src = ./.;
}
#+end_src

et le défaut

#+begin_example
{ pkgs ? import <nixpkgs> {} }:
pkgs.callPackage ./derivation.nix {}
#+end_example

Il ne reste plus qu'à le construire

#+begin_example
nix-build
result/bin/lol.py
#+end_example

* Python libraries
On package l'exécutable python avec les libraries. Mettre dans
=default.nix=

#+begin_src nix
with (import <nixpkgs> {});
let
  my-python-packages = python-packages: with python-packages; [
    pandas
    requests
    # other python packages you want
  ];
in
python3.withPackages my-python-packages
#+end_src

Puis

#+begin_src sh
nix-build default.nix
result/bin/python
>>> import pandas
#+end_src

Si on veut juste un shell, mettre dans =shell.nix=

#+begin_src sh
{ pkgs ? import <nixpkgs> {} }:
let
  my-python-packages = ps: with ps; [
    pandas
    pysam
    # other python packages
  ];
  my-python = pkgs.python3.withPackages my-python-packages;
in my-python.env
#+end_src