NixOS

Environnements de développement NixOS

Environnements de développement NixOS
Lors du développement et de l'exécution de logiciels, et souvent, vous avez besoin d'un ensemble très particulier de bibliothèques dans votre environnement. Vous y parvenez avec des environnements virtuels, des conteneurs et d'autres astuces. Cependant, vous n'avez pas nécessairement besoin de tout cela. Un cas courant est que lorsque vous programmez en Python, vous devez choisir entre les deux grandes versions. Cela a causé de nombreux maux de tête aux utilisateurs et aux développeurs. Vous pouvez éviter tout cela si vos bibliothèques sont désignées, en particulier pour une seule exécution. Cela peut sembler impossible ou inutile, mais c'est très pratique pour les cas d'utilisation rares et le développement.

L'enfer des révisions

Quiconque lira ceci connaîtra le problème Python lié à l'utilisation d'une version différente du langage. Ce n'est qu'un exemple flagrant où même les utilisateurs sont affectés. Cela est dû à d'anciens projets brillants qui ont cessé de maintenir le logiciel. Dans de nombreuses autres situations, vous avez également besoin d'un grand contrôle sur ce qui est en cours d'exécution et sur les bibliothèques disponibles. La programmation en C et C++ utilise des bibliothèques qui doivent souvent être la version exacte lors de la compilation. Sinon, vous réécrirez des parties du logiciel que vous n'avez jamais eu l'intention de toucher. De nombreux développeurs utilisent un conteneur avec toutes les bibliothèques, et tous les autres travaux se produisent sur l'ordinateur hôte.

La solution Nix

Comment nix s'occupe-t-il de ce problème? Eh bien, ils ont tous les fichiers dans un magasin avec des hachages pour identifier la version exacte. L'environnement que vous allez utiliser, puis lier à la bibliothèque ou exécuter, est quelque chose que vous voudriez utiliser pour votre situation actuelle. Pour un système en cours d'exécution, vous pouvez alors utiliser de nombreuses versions d'une application et même des bibliothèques. Lorsque vous souhaitez développer, vous créez un fichier de configuration qui couvre les besoins de votre projet en cours.

Fichiers de configuration

Lorsque vous avez installé NixOS, la configuration.nix contrôlera votre environnement pour l'ensemble de l'ordinateur. Cela dit, vous pouvez le contrôler dans chaque instance de votre shell. Que vous ayez NixOS ou que vous exécutiez une autre distribution, vous pouvez utiliser un autre fichier nix. Le fichier s'appelle par défaut.rien par défaut. Vous pouvez l'utiliser pour créer une structure de répertoires avec un environnement particulier. Le flux de travail consiste à créer le fichier nix par défaut pour refléter ce que vous voulez que votre environnement prenne en charge. Ensuite, changez de répertoire et exécutez nix-build, suivi de l'exécution du nix-shell. Vous pouvez également utiliser n'importe quel nom pour le fichier si vous le spécifiez sur la ligne de commande.

$ cd MonProjet/
$ nix-build # Une fois, quand vous avez changé quelque chose.
$ nix-shell par défaut.rien

Le paramètre pour le nix-shell sera implicite, mais si vous voulez en avoir plusieurs dans un répertoire, vous pouvez utiliser le commutateur. Avec les valeurs correctes définies, votre environnement est désormais le même à chaque démarrage de nix-shell. Si vous déplacez le fichier nix, vous pourrez obtenir le même n'importe où! Le gros problème devient ; qu'est-ce que je mets dans les fichiers nix?

Les fichiers utilisent le langage d'expression Nix, c'est presque un langage de programmation.

Quelques exemples

Ci-dessous, quelques exemples qui peuvent vous aider. Il y a beaucoup plus de choses que vous pouvez faire pour peaufiner votre environnement. C'est un long voyage passionnant, mais il vous ralentira probablement dès le début. Avant d'y arriver, utilisez le code des autres. Cette liste est courte, alors cherchez des idées sur le Web.

Python

Lorsque vous souhaitez créer un projet Python, vous utilisez normalement des environnements virtuels. Avec Nix, ce n'est pas nécessaire. Au lieu de cela, vous pouvez créer un shell.nix fichier qui déclare quelle version vous voulez. La façon la plus simple de le faire est d'utiliser python38Full.

paquets ? importer  :
paquets.mkShell
# nativeBuildInputs est généralement ce que vous voulez -- les outils dont vous avez besoin pour exécuter
nativeBuildInputs = [ paquets.buildPackages.python38Complet];

Cela compile un environnement avec toutes les parties de Python 3.8 qui vient avec NixOS. Si vous souhaitez minimiser votre environnement, vous pouvez choisir ses pièces particulières. Vous pouvez également ajouter votre code source à distance avec des fonctions de récupération.

Flacon Python

Un exemple de développement Web est un flacon. C'est un package très puissant pour créer des pages Web, même très complexes, sans trop d'effort. Étant donné que Flask est un framework populaire, il existe un package NixOS prêt pour cela. Le fichier pour contrôler la construction pour cela est appelé par défaut.rien.

paquets ? importer  :
paquets.python38Forfaits.buildPythonApplication
pname = "NixApp" ;
src = ./.;
version = "0.1";
propagéesBuildInputs = [ paquets.python38Forfaits.flacon ] ;

Comme vous pouvez le voir, il existe des packages de nixpkgs qui couvrent flask. Si vous voulez utiliser autre chose, vous les ajoutez entre crochets. Cela vaut pour tous les types de packages inclus dans le référentiel NixPkgs. Si le package n'existe pas, utilisez un fetcher.

Développement Python

Si vous souhaitez démarrer un environnement de développement Python, vous ajoutez les packages dont vous avez besoin en fonction de la révision et d'autres.

avec importation  ;
avec des paquets.python37Paquets ;
stdenv.mkDerivation
nom = "python-devel" ;
req = ./conditions.SMS;
constructeur = "$bash/bin/bash" ;
configuration = ./setup_venv.ch;
buildInputs = [
python37Complet
python37Paquets.pépin
] ;
système = fonctions intégrées.système actuel;
shellHook = "
SOURCE_DATE_EPOCH=$(date +%s)
";

Dans le shellHook, entre les doubles apostrophes ("), vous pouvez mettre tous les scripts que vous aimez. Encore une fois, pensez à ce qui pourrait déjà exister, car de nombreuses personnes intelligentes développent déjà avec NixOS.

JavaScript

La version standard pour utiliser JavaScript, ou plus précisément, nodejs, est le script nix ci-dessous. Nommez-le shell.nix et placez-le dans votre répertoire de projet, puis démarrez avec la commande nix-shell.

avec importation  ;
stdenv.mkDerivation
nom = "nœud" ;
buildInputs = [
nodejs
] ;
shellHook = "
export PATH="$PWD/node_modules/.bin/:$CHEMIN"
";

C'est l'astuce la plus simple et possible, bien qu'il y en ait beaucoup plus disponibles. Vous pouvez voir comment ajouter un script que vous auriez autrement exécuté manuellement. Utilisez ceci avec précaution et recherchez des alternatives complètes avant de faire cela.

Jupyter

Le script ci-dessous initialise un répertoire pour héberger un lot de fonctions où vous pouvez exécuter Jupyter. Les autres packages sont destinés aux statistiques et à l'apprentissage automatique. Vous pouvez également supprimer et ajouter selon vos besoins.

avec importation  ;
(
laisser
en python38.withPackages (ps: with ps; [ geopandas ipython jupyter
jupyterlab matplotlib numpy pandas seaborn toolz ])
).env

Configurations

Pour votre IDE, éditeur ou n'importe quoi, vraiment, vous pouvez également cuire dans vos paramètres. Pour les développeurs, vim et Emacs seront les premiers candidats à cette spécialisation. Vim a son propre ensemble de plugins disponibles sous forme de nixpkgs.

Extracteurs

La base des packages dans NixOS sont des fichiers qui pointent vers les sources et ce qui est nécessaire pour compiler les packages. Vous pouvez l'utiliser s'il vous manque un paquet. Tant que vous pouvez trouver le paquet source, vous pouvez utiliser un fetcher pour l'installer. Le récupérateur standard récupère les archives mais s'appelle fetchurl.

stdenv, récupérer  :
stdenv.mkDerivation
nom = "bonjour" ;
src = récupérer
URL = "http://www.Exemple.org/bonjour.le goudron.gz" ;
sha256 = "1111111111111111111111111111111111111111111111111111111" ;
 ;

Vous pouvez l'utiliser tel qu'il est dans le code ci-dessus. Vous disposez également de fetchgit et d'autres systèmes de contrôle de version. En plus de cela, les principaux services git sont couverts par fetchFromGitHub, fetchFromGitLab, etc. Avec tous ces récupérateurs, vous devriez pouvoir trouver n'importe quel package pour NixOS.

Conclusion

L'utilisation de NixOS nécessite un peu plus d'efforts que les autres distributions. Cela dit, si vous voulez développer un logiciel, l'effort en vaut la peine. Vous garderez votre système principal plus propre et pourrez sauter entre les projets sans créer de conflits gênants entre les environnements.

Tutoriel Shadow of the Tomb Raider pour Linux
Shadow of the Tomb Raider est le douzième ajout à la série Tomb Raider - une franchise de jeux d'action-aventure créée par Eidos Montréal. Le jeu a ét...
Comment booster les FPS sous Linux?
FPS signifie Images par seconde. La tâche du FPS est de mesurer la fréquence d'images dans les lectures vidéo ou les performances de jeu. En termes si...
Meilleurs jeux de laboratoire d'applications Oculus
Si vous êtes propriétaire d'un casque Oculus, vous devez être au courant du chargement latéral. Le chargement latéral est le processus d'installation ...