Change status for nix-shell and Postgresql FIX and publish nix-shell and flask
This commit is contained in:
parent
ca63274795
commit
e5e2f6f4e9
|
@ -11,12 +11,12 @@ Tags:
|
|||
- flask
|
||||
---
|
||||
# nix-shell et dotenv
|
||||
Pour mes besoins de gestion, je souhaite me développer de quoi alimenter une base de données PostgreSQL. Rien de très compliqué, mais qui va me faire gagner du temps et me permettre d'assurer le pilotage de mon entreprise.
|
||||
Pour mes besoins de gestion, je souhaite me développer de quoi alimenter une base de données PostgreSQL. Rien de très compliqué, mais qui va me faire gagner du temps et me permettre d'assurer le pilotage de mes affaires.
|
||||
|
||||
Je suis pas développeur, je connais rien aux css et et pas plus au js.
|
||||
|
||||
Mais je sais de quoi j'ai besoins.
|
||||
Il y a longtemps que j'aurai du me mettre à un peu de dev. Je vais pas devenir un ténor, mais au moins je serai capable d'avancer.
|
||||
Il y a longtemps que j'aurai du me mettre à faire un peu de dev. Je vais pas devenir un ténor, mais au moins je serai capable d'avancer en autonomie.
|
||||
|
||||
Par ou commencer ? Quel language est le plus simple à prendre en main, pour aller à l'essentiel (le service que va me rendre l'application) et une bonne intégration/usage avec mon poste de travail ?
|
||||
|
||||
|
@ -27,6 +27,10 @@ Après une rapide étude et quelques tests :
|
|||
|
||||
# Mise en place des briques
|
||||
|
||||
Au quotidien, j'utilise **fish** comme shell, mais il y a quelques problèmes car le standard est bash. Ici le vrai problème que j'ai rencontré, c'est dans l'utilisation du serveur http intégré de Flask. Avec fish, il plante, avec bash tout va bien.
|
||||
|
||||
On va donc faire en sorte de lancer le serveur de développement, en étant sous bash.
|
||||
|
||||
## Création d'un environnement de développement
|
||||
|
||||
La solution miracle se nomme nix-shell. Dans ce qui va devenir notre répertoire de développement, on crée le fichier **default.nix** suivant :
|
||||
|
@ -42,28 +46,75 @@ La solution miracle se nomme nix-shell. Dans ce qui va devenir notre répertoire
|
|||
}
|
||||
|
||||
Dans ce fichier on crée une dérivation nommée **rec** constituées des paquets python3 et python39Packages.flask.
|
||||
La dérivation va nous créer un environnement avec python39 et flask. On peut y ajouter tout ce dont on a besoins, comme le moteur de la bdd PostgreSQL (ce qu'on fera plutard dans le projet)
|
||||
La dérivation va nous créer un environnement avec python39 et flask. On peut y ajouter tout ce dont on a besoins, comme le moteur de la bdd PostgreSQL (ce qu'on fera plustard dans le projet)
|
||||
|
||||
Comme je suis faignant, je vais utiliser un fichier **.envrc** pour charger automatiquement mon nix-shell :
|
||||
Comme je suis faignant, je vais utiliser un fichier **.envrc** pour charger automatiquement mon nix-shell. On ajoute donc la ligne suivante dans le fichier **.envrc** :
|
||||
|
||||
use_nix
|
||||
|
||||
On oublis pas d'autoriser le chargement du fichier **.envrc** via la commande :
|
||||
On oubli pas d'autoriser le chargement du fichier **.envrc** via la commande :
|
||||
|
||||
direnv allow
|
||||
|
||||
|
||||
Vous devriez maintenant avoir l'environnement de dispo
|
||||
|
||||
## Chargement de l'environnement
|
||||
## Création et chargement de l'environnement
|
||||
|
||||
Le chargement de l'environnement python est classique :
|
||||
La création de l'environnement virtuel python est classique :
|
||||
|
||||
python -m venv .venv
|
||||
source .venv/bin/activate.fish
|
||||
python -m venv ~/virtualenv/.flask-app
|
||||
|
||||
A partir de maintenant vous pouvez commencer à coder
|
||||
Pour le charger, il suffit de faire, avec Fish :
|
||||
|
||||
source ~/virtualenv/.flask-app/bin/activate.fish
|
||||
|
||||
Avec Bash :
|
||||
|
||||
source ~/virtualenv/.flask-app/bin/activate
|
||||
|
||||
A partir de maintenant vous pouvez commencer à utiliser pip et flask
|
||||
|
||||
## On peut pas avoir un chargement automatique ?
|
||||
|
||||
En théorie, on peux, via un shellHook charger l'environnement et même faire installer les paquets python via pip
|
||||
Par exemple, on entre dans le dossier et paf, ça charge le virtualenv, et on met à jour les modules via pip ?
|
||||
|
||||
Tout d'abord, si comme moi vous utilisez **fish** il faut s'assurer d'avoir dans le fichier **~/.config/fish/config.fish** la ligne suivante :
|
||||
|
||||
direnv hook fish | source
|
||||
|
||||
|
||||
Si vous utilisez bash, vous ajoutez à votre **.bashrc** :
|
||||
|
||||
eval "$(direnv hook bash)"
|
||||
|
||||
|
||||
ligne est nécessaire pour charger automatiquement le script **activate.fish**. Sans cette ligne vous aurez une erreur 2.
|
||||
|
||||
|
||||
Notre fichier **default.nix** ressemble maintenant à ça :
|
||||
|
||||
with import<nixpkgs> {};
|
||||
stdenv.mkDerivation rec {
|
||||
name = "env";
|
||||
env = buildEnv { name = name; paths = buildInputs; };
|
||||
venvDir = "./.venv";
|
||||
buildInputs = [
|
||||
python3
|
||||
python39Packages.flask
|
||||
];
|
||||
shellHook = ''
|
||||
source "${venvDir}/bin/activate"
|
||||
#pip install -r requirements.txt
|
||||
export FLASK_APP=hello
|
||||
export FLASK_ENV=developpement
|
||||
'';
|
||||
}
|
||||
|
||||
Normalement, dès que vous entrez dans le dossier, le virtualenv est chargé, les variables d'environnement aussi et vous pouvez tester votre nouvelle application avec un simple :
|
||||
|
||||
flask run
|
||||
|
||||
Si vous avez besoins de modules via pip, il suffit de décommenter la ligne commençant par pip et de renseigner le fichier requirements.txt. Les modules seront automatiquement installés.
|
||||
|
||||
Reste plus qu'a mettre l'ensemble dans un dépôt git et à vous concentrer sur votre application.
|
||||
|
|
|
@ -4,6 +4,7 @@ Author: Alexandre LUCAZEAU
|
|||
Title: Nixos - Avoir un environnement PostgreSQL de développement grace à nixshell
|
||||
Slug:
|
||||
categories: Nixos
|
||||
draft: true
|
||||
Tags:
|
||||
- nixos
|
||||
- nixshell
|
||||
|
|
Loading…
Reference in New Issue