NixOS

NixOS udviklingsmiljøer

NixOS udviklingsmiljøer
Når du udvikler og kører software, og mange gange, har du brug for et meget bestemt sæt biblioteker i dit miljø. Du opnår dette med virtuelle miljøer, containere og andre tricks. Du behøver dog ikke nødvendigvis alt det. En almindelig sag er, når du programmerer i Python, skal du vælge mellem de to store versioner. Dette har forårsaget mange hovedpine for både brugere og udviklere. Du kan undgå alt dette, hvis dine biblioteker er udpeget, især til en kørsel. Dette lyder måske umuligt eller unødvendigt, men det er meget praktisk i sjældne tilfælde og udvikling.

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 ? importere :
pkgs.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 ? importere :
pkgs.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 import ;
med 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 import ;
stdenv.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.

Mus Sådan ændres mus og touchpad-indstillinger ved hjælp af Xinput i Linux
Sådan ændres mus og touchpad-indstillinger ved hjælp af Xinput i Linux
De fleste Linux-distributioner leveres som standard med "libinput" -biblioteket til at håndtere inputhændelser på et system. Det kan behandle inputhæn...
Mus Remap dine museknapper forskelligt til anden software med X-Mouse Button Control
Remap dine museknapper forskelligt til anden software med X-Mouse Button Control
Måske har du brug for et værktøj, der kan ændre din muses kontrol med hver applikation, du bruger. Hvis dette er tilfældet, kan du prøve en applikatio...
Mus Microsoft Sculpt Touch Wireless Mouse Review
Microsoft Sculpt Touch Wireless Mouse Review
Jeg har for nylig læst om Microsoft Sculpt Touch trådløs mus og besluttede at købe den. Efter at have brugt det et stykke tid besluttede jeg at dele m...