Revision helvede
Enhver, der læser dette, vil være bekendt med Python-spørgsmålet om at bruge en anden version af sproget. Det er kun et åbenlyst eksempel, hvor selv brugere er berørt. Dette skyldes gamle strålende projekter, der er stoppet med at vedligeholde softwaren. I mange andre situationer har du også brug for stor kontrol over, hvad der kører, og hvilke biblioteker der er tilgængelige. Programmering i C og C ++ bruger biblioteker, der ofte skal være den nøjagtige version, når du kompilerer. Ellers vil du omskrive dele af softwaren, som du aldrig har tænkt dig at røre ved. Mange udviklere bruger en container med alle bibliotekerne, og alle andre værker sker på værtscomputeren.
Nix Fix
Hvordan tager nix sig af dette problem? Nå, de har alle filerne i en butik med hashes for at identificere den nøjagtige version. Det miljø, du vil bruge, derefter linke til biblioteket eller udføre, er noget, du gerne vil bruge til din nuværende situation. For et kørende system kan du derefter bruge mange versioner af en applikation og endda biblioteker. Når du vil udvikle dig, opretter du en konfigurationsfil, der dækker behovene i dit nuværende projekt.
Konfigurationsfiler
Når du har NixOS installeret, konfigurationen.nix styrer dit miljø for hele computeren. Når det er sagt, kan du kontrollere det i alle tilfælde af din skal. Uanset om du har NixOS eller kører en anden distribution, kan du bruge en anden nix-fil. Filen kaldes standard.nix som standard. Du kan bruge dette til at oprette en katalogstruktur, der har et bestemt miljø. Workflowet er at oprette standard nix-filen for at afspejle, hvad du vil have dit miljø til at understøtte. Skift derefter biblioteket, og kør nix-build, efterfulgt af at køre nix-shell. Du kan også bruge ethvert navn til filen, hvis du angiver det på kommandolinjen.
$ cd MyProject /$ nix-build # En gang, når du har ændret noget.
$ nix-shell-standard.nix
Parameteren til nix-shell vil blive underforstået, men hvis du vil have flere i en mappe, kan du bruge kontakten. Med de korrekte værdier indstillet, har du nu dit miljø det samme, hver gang du starter nix-shell. Hvis du flytter nix-filen, kan du få den samme overalt! Det store spørgsmål bliver; hvad lægger jeg i nix-filerne?
Filerne bruger Nix-ekspressionssprog, det er næsten et programmeringssprog.
Et par eksempler
Nedenfor er der et par eksempler, der kan hjælpe dig. Der er mange flere ting, du kan gøre for at finjustere dit miljø. Dette er en lang spændende rejse, men det vil sandsynligvis bremse dig fra starten. Inden du ankommer, skal du bruge andres kode. Denne liste er kort, så se efter ideer på nettet.
Python
Når du vil oprette et Python-projekt, bruger du normalt virtuelle miljøer. Med Nix er dette ikke nødvendigt. I stedet kan du oprette en skal.nix-fil, der erklærer, hvilken version du vil have. Den enkleste måde at gøre dette på er at bruge python38Full.
pkgs ? importerepkgs.mkShell
# nativeBuildInputs er normalt det, du vil have - værktøjer, du har brug for at køre
nativeBuildInputs = [pkgs.buildPackages.python38Full];
Dette kompilerer et miljø med alle dele af Python 3.8 der følger med NixOS. Hvis du vil minimere dit miljø, kan du vælge dets særlige dele. Du kan også tilføje din kildekode eksternt med hentningsfunktioner.
Python-kolbe
Et eksempel på webudvikling er en kolbe. Det er en meget kraftfuld pakke til at lave websider, endda virkelig komplekse, uden megen anstrengelse. Da Flask er en populær ramme, er der en klar NixOS-pakke til den. Filen til styring af build til dette kaldes standard.nix.
pkgs ? importerepkgs.python38Pakker.buildPythonApplication
pname = "NixApp";
src = ./.;
version = "0.1 ";
propagatedBuildInputs = [pkgs.python38Pakker.kolbe];
Som du kan se, er der pakker fra nixpkgs, der dækker kolben. Hvis du vil bruge noget andet, skal du tilføje dem inden for de firkantede parenteser. Dette gælder for alle typer pakker, der er inkluderet i NixPkgs-arkivet. Hvis pakken ikke findes, skal du bruge en føder.
Python-udvikling
Hvis du vil starte et Python-udviklingsmiljø, tilføjer du pakker, du har brug for i henhold til revision og andre.
med importmed pkgs.python37Pakker;
stdenv.mkDerivation
navn = "python-udvikling";
req = ./ krav.txt
builder = "$ bash / bin / bash";
opsætning = ./ setup_venv.sh;
buildInputs = [
python37Fuld
python37Pakker.pip
];
system = indbyggede.nuværende System;
shellHook = "
SOURCE_DATE_EPOCH = $ (dato +% s)
";
I shellHook mellem de dobbelte apostrofer (”) kan du placere de scripts, du kan lide. Igen, tænk på, hvad der allerede kan eksistere, da der er mange smarte mennesker derude, der allerede udvikler sig ved hjælp af NixOS.
JavaScript
Standardversionen til at bruge JavaScript eller mere præcist nodejs er nix-scriptet nedenfor. Navngiv det skal.nix og placer den i din projektmappe, og start derefter med kommandoen nix-shell.
med importstdenv.mkDerivation
navn = "node";
buildInputs = [
nodejs
];
shellHook = "
eksporter PATH = "$ PWD / node_modules /.bin /: $ PATH "
";
Dette er det enkleste, mulige trick, selvom der er meget mere tilgængelige. Du kan se, hvordan du tilføjer et script, som du ellers ville køre manuelt. Brug dette omhyggeligt og se efter komplette alternativer, inden du gør dette.
Jupyter
Nedenstående script initialiserer en mappe til at være vært for en række funktioner, hvor du kan køre Jupyter. De andre pakker er beregnet til statistik og maskinindlæring. Du kan også fjerne og tilføje alt efter dine behov.
med import(
lade
i python38.withPackages (ps: med ps; [geopandas ipython jupyter
jupyterlab matplotlib numpy pandas seaborn toolz])
).env
Konfigurationer
For din IDE, editor eller noget, kan du virkelig bage i dine indstillinger. For udviklere er vim og Emacs de første kandidater til denne specialisering. Vim har sit eget sæt plugins til rådighed som nixpkgs.
Hentere
Grundlaget for pakkerne i NixOS er filer, der peger på kilder, og hvad der er nødvendigt for at kompilere pakkerne. Du kan bruge dette, hvis du mangler en pakke. Så længe du kan finde kildepakken, kan du bruge en fetcher til at installere den. Standardfetcher henter tarballs, men hedder fetchurl.
stdenv, fetchurl:stdenv.mkDerivation
navn = "hej";
src = fetchurl
url = "http: // www.eksempel.org / hej.tjære.gz ";
sha256 = "1111111111111111111111111111111111111111111111111111";
;
Du kan bruge det som det er i ovenstående kode. Du har også fetchgit og andre versionskontrolsystemer. Oven i dette er de største git-tjenester dækket med fetchFromGitHub, fetchFromGitLab og mere. Med alle disse hentere skal du være i stand til at finde den pakke, du ønsker til NixOS.
Konklusion
Brug af NixOS kræver lidt mere indsats end andre distributioner. Når det er sagt, hvis du vil udvikle software, er indsatsen det værd. Du holder dit hovedsystem renere og kan springe mellem projekter uden at skabe generende konflikter mellem miljøer.