NixOS

NixOS-ontwikkelomgevingen

NixOS-ontwikkelomgevingen
Bij het ontwikkelen en uitvoeren van software, en vaak, hebt u een zeer specifieke set bibliotheken in uw omgeving nodig. Dit bereik je met virtuele omgevingen, containers en andere trucs. Dat heb je echter niet per se nodig. Een veelvoorkomend geval is dat wanneer je in Python programmeert, je moet kiezen tussen de twee grote versies. Dit heeft zowel gebruikers als ontwikkelaars veel kopzorgen bezorgd. U kunt dit alles vermijden als uw bibliotheken zijn aangewezen, vooral voor één run. Dit klinkt misschien onmogelijk of onnodig, maar het is erg handig voor zeldzame gevallen en ontwikkeling.

Revisie Hell

Iedereen die dit leest, zal bekend zijn met het Python-probleem van het gebruik van een andere versie van de taal. Dat is slechts een in het oog springend voorbeeld waar zelfs gebruikers last van hebben. Dit komt door oude briljante projecten die zijn gestopt met het onderhouden van de software. In veel andere situaties heb je ook grote controle nodig over wat er draait en welke bibliotheken beschikbaar zijn. Programmeren in C en C++ maakt gebruik van bibliotheken die vaak de exacte versie moeten zijn wanneer je compileert. Anders herschrijft u delen van de software die u nooit van plan was aan te raken. Veel ontwikkelaars gebruiken een container met alle bibliotheken en alle andere werken gebeuren op de hostcomputer.

De Nix Fix

Hoe lost nix dit probleem op?? Nou, ze hebben alle bestanden in een winkel met hashes om de exacte versie te identificeren. De omgeving die u gaat gebruiken en vervolgens naar de bibliotheek linken of uitvoeren, is iets dat u voor uw huidige situatie zou willen gebruiken. Voor een draaiend systeem kun je dan vele versies van een applicatie en zelfs bibliotheken gebruiken. Wanneer u wilt ontwikkelen, maakt u een configuratiebestand dat voldoet aan de behoeften van uw huidige project.

Configuratiebestanden

Als je NixOS hebt geïnstalleerd, is de configuratie.nix beheert je omgeving voor de hele computer. Dat gezegd hebbende, je kunt het in elk geval van je shell besturen. Ongeacht of je NixOS hebt of een andere distributie uitvoert, je kunt een ander nix-bestand gebruiken. Het bestand heet standaard.standaard nix. U kunt dit gebruiken om een ​​directorystructuur te maken met een bepaalde omgeving. De workflow is om het standaard nix-bestand te maken om weer te geven wat u wilt dat uw omgeving ondersteunt. Wijzig vervolgens de map en voer nix-build uit, gevolgd door het uitvoeren van de nix-shell. U kunt ook elke naam voor het bestand gebruiken als u deze op de opdrachtregel opgeeft.

$ cd MijnProject/
$ nix-build # Een keer, als je iets hebt veranderd.
$ nix-shell standaard.nix

De parameter voor de nix-shell wordt geïmpliceerd, maar als je er meerdere in één map wilt hebben, kun je de schakelaar gebruiken. Met de juiste waarden ingesteld, is je omgeving nu elke keer dat je nix-shell start hetzelfde. Als je het nix-bestand verplaatst, kun je hetzelfde overal krijgen! Het grote probleem wordt; wat plaats ik in de nix-bestanden?

De bestanden gebruiken de Nix-expressietaal, het is bijna een programmeertaal.

Een paar voorbeelden

Hieronder vindt u enkele voorbeelden die u kunnen helpen. Er zijn nog veel meer dingen die u kunt doen om uw omgeving aan te passen. Dit is een lange spannende reis, maar het zal je waarschijnlijk vanaf het begin vertragen. Voordat je daar aankomt, gebruik je de code van anderen. Deze lijst is kort, dus zoek naar ideeën op internet.

Python

Wanneer u een Python-project wilt maken, gebruikt u normaal gesproken virtuele omgevingen. Met Nix is ​​dit niet nodig. In plaats daarvan kunt u een shell maken.nix-bestand dat aangeeft welke versie je wilt. De eenvoudigste manier om dit te doen, is door python38Full . te gebruiken.

pkgs ? importeren :
pkgs.mkShell
# nativeBuildInputs is meestal wat je wilt -- tools die je nodig hebt om uit te voeren
nativeBuildInputs = [ pkgs.buildPakketten.python38Volledig];

Dit compileert een omgeving met alle delen van de Python 3.8 die wordt geleverd met NixOS. Als u uw omgeving wilt minimaliseren, kunt u de specifieke onderdelen kiezen choose. U kunt uw broncode ook op afstand toevoegen met ophaalfuncties.

Python-kolf

Een voorbeeld van webontwikkeling is een kolf. Het is een zeer krachtig pakket voor het maken van webpagina's, zelfs heel complexe, zonder veel moeite. Omdat Flask een populair framework is, is er een klaar NixOS-pakket voor. Het bestand om de build hiervoor te besturen, wordt standaard genoemd.nix.

pkgs ? importeren :
pkgs.python38Pakketten.buildPythonApplicatie
pname = "NixApp";
src = ./.;
versie = "0.1";
propagatedBuildInputs = [ pkgs.python38Pakketten.kolf];

Zoals je kunt zien, zijn er pakketten van nixpkgs die de fles bedekken. Als je iets anders wilt gebruiken, voeg je ze toe tussen de vierkante haken. Dit geldt voor alle soorten pakketten die zijn opgenomen in de NixPkgs-repository. Als het pakket niet bestaat, gebruik dan een fetcher.

Python-ontwikkeling

Als je een Python-ontwikkelomgeving wilt starten, voeg je pakketten toe die je nodig hebt volgens revisie en andere.

met import ;
met pkgs.python37Pakketten;
stdenv.mkAfleiding
name = "python-devel";
req = ./vereisten.tekst;
builder = "$bash/bin/bash";
instellen = ./setup_venv.sch;
buildInputs = [
python37Volledig
python37Pakketten.Pip
];
systeem = ingebouwde.huidige systeem;
shellHook = "
SOURCE_DATE_EPOCH=$(datum +%s)
";

In de shellHook, tussen de dubbele apostrofs ("), kun je alle gewenste scripts plaatsen. Nogmaals, denk eens na over wat er misschien al bestaat, want er zijn veel slimme mensen die zich al ontwikkelen met NixOS.

JavaScript

De standaardversie om JavaScript te gebruiken, of beter gezegd, nodejs, is het onderstaande nix-script. Noem het shell.nix en plaats het in je projectdirectory, begin dan met het nix-shell commando.

met import ;
stdenv.mkAfleiding
naam = "knooppunt";
buildInputs = [
nodejs
];
shellHook = "
export PATH="$PWD/node_modules/.bin/:$PAD"
";

Dit is de eenvoudigste, mogelijke truc, hoewel er veel meer beschikbaar is. U kunt zien hoe u een script toevoegt dat u anders handmatig zou uitvoeren. Gebruik dit zorgvuldig en zoek naar volledige alternatieven voordat u dit doet.

Jupiterpy

Het onderstaande script initialiseert een map om een ​​reeks functies te hosten waar u Jupyter kunt uitvoeren. De andere pakketten zijn voor statistieken en machine learning. U kunt ook verwijderen en toevoegen volgens uw behoeften.

met import ;
(
laat
in python38.withPackages (ps: with ps; [ geopandas ipython jupyter
jupyterlab matplotlib numpy panda's seaborn toolz ])
).env

Configuraties

Voor je IDE, editor of wat dan ook, je kunt ook bakken in je instellingen. Voor ontwikkelaars zijn vim en Emacs de eerste kandidaten voor deze specialisatie. Vim heeft zijn eigen set plug-ins beschikbaar als nixpkgs.

Ophalers

De basis van de pakketten in NixOS zijn bestanden die verwijzen naar bronnen en wat nodig is voor het samenstellen van de pakketten. U kunt dit gebruiken als u een pakket mist. Zolang je het broncodepakket kunt vinden, kun je een ophaler gebruiken om het te installeren. De standaard fetcher haalt tarballs op, maar heet fetchurl.

stdenv, fetchurl :
stdenv.mkAfleiding
naam = "hallo";
src = ophalen
url = "http://www.voorbeeld.org/hallo.teer.gz";
sha256 = "111111111111111111111111111111111111111111111111111111";
;

Je kunt het gebruiken zoals het is in de bovenstaande code. Je hebt ook fetchgit en andere versiebeheersystemen. Bovendien zijn de belangrijkste git-services bedekt met fetchFromGitHub, fetchFromGitLab en meer. Met al deze ophalers zou je elk gewenst pakket voor NixOS moeten kunnen vinden.

Conclusie

Het gebruik van NixOS vereist wat meer inspanning dan andere distributies. Dat gezegd hebbende, als je software wilt ontwikkelen, is het de moeite waard. Je houdt je hoofdsysteem schoner en kunt tussen projecten springen zonder lastige conflicten tussen omgevingen te veroorzaken.

Met WinMouse kunt u de beweging van de muisaanwijzer op Windows-pc aanpassen en verbeteren
Als u de standaardfuncties van uw muisaanwijzer wilt verbeteren, gebruik dan freeware WinMuis. Het voegt meer functies toe om u te helpen het meeste u...
Linkermuisknop werkt niet op Windows 10
Als u een speciale muis gebruikt met uw laptop of desktopcomputer, maar de linkermuisknop werkt niet not op Windows 10/8/7 om wat voor reden dan ook, ...
Cursor springt of beweegt willekeurig tijdens het typen in Windows 10
Als u merkt dat uw muiscursor vanzelf springt of beweegt, automatisch, willekeurig tijdens het typen op een Windows-laptop of -computer, dan kunnen en...