NixOS

NixOS utviklingsmiljøer

NixOS utviklingsmiljøer
Når du utvikler og kjører programvare, og mange ganger, trenger du et veldig spesielt sett med biblioteker i miljøet ditt. Du oppnår dette med virtuelle miljøer, containere og andre triks. Du trenger imidlertid ikke nødvendigvis alt det. Et vanlig tilfelle er når du programmerer i Python, må du velge mellom de to store versjonene. Dette har forårsaket mange hodepine for både brukere og utviklere. Du kan unngå alt dette hvis bibliotekene dine er utpekt, spesielt for en løpetur. Dette kan høres umulig eller unødvendig ut, men det er veldig praktisk for sjeldne brukstilfeller og utvikling.

Revisjonshelvete

Alle som leser dette vil være kjent med Python-problemet med å bruke en annen versjon av språket. Det er bare et skarpt eksempel der selv brukere blir berørt. Dette skyldes gamle strålende prosjekter som har sluttet å vedlikeholde programvaren. I mange andre situasjoner trenger du også god kontroll over hva som kjører og hvilke biblioteker som er tilgjengelige. Programmering i C og C ++ bruker biblioteker som ofte trenger å være den nøyaktige versjonen når du kompilerer. Ellers vil du skrive om deler av programvaren du aldri hadde tenkt å berøre. Mange utviklere bruker en container med alle bibliotekene, og alle andre verk skjer på vertsdatamaskinen.

Nix Fix

Hvordan tar nix seg av dette problemet? Vel, de har alle filene i en butikk med hashes for å identifisere den eksakte versjonen. Miljøet du skal bruke, deretter lenke til biblioteket eller utføre, er noe du vil bruke for din nåværende situasjon. For et løpende system kan du bruke mange versjoner av et program og til og med biblioteker. Når du vil utvikle deg, oppretter du en konfigurasjonsfil som dekker behovene til ditt nåværende prosjekt.

Konfigurasjonsfiler

Når du har installert NixOS, konfigurasjonen.nix vil kontrollere miljøet ditt for hele datamaskinen. Når det er sagt, kan du kontrollere det i alle tilfeller av skallet ditt. Uansett om du har NixOS eller kjører en annen distribusjon, kan du bruke en annen nix-fil. Filen kalles standard.nix som standard. Du kan bruke dette til å lage en katalogstruktur som har et bestemt miljø. Arbeidsflyten er å opprette standard nix-filen for å gjenspeile det du vil at miljøet ditt skal støtte. Endre deretter katalogen og kjør nix-build, etterfulgt av å kjøre nix-shell. Du kan også bruke hvilket som helst navn på filen hvis du angir det på kommandolinjen.

$ cd MyProject /
$ nix-build # En gang, når du har endret noe.
$ nix-shell standard.nix

Parameteren for nix-skallet vil være underforstått, men hvis du vil ha flere i en katalog, kan du bruke bryteren. Med de riktige verdiene satt, har du nå miljøet ditt det samme hver gang du starter nix-shell. Hvis du flytter nix-filen, vil du kunne få den samme hvor som helst! Den store saken blir; hva legger jeg i nix-filene?

Filene bruker Nix-uttrykksspråket, det er nesten et programmeringsspråk.

Noen få eksempler

Nedenfor er det noen få eksempler som kan hjelpe deg. Det er mange flere ting du kan gjøre for å tilpasse miljøet ditt. Dette er en lang spennende reise, men den vil nok redusere farten fra begynnelsen. Bruk andres kode før du kommer dit. Denne listen er kort, så se etter ideer på nettet.

Python

Når du vil lage et Python-prosjekt, bruker du vanligvis virtuelle miljøer. Med Nix er dette ikke nødvendig. I stedet kan du lage et skall.nix-fil som erklærer hvilken versjon du vil ha. Den enkleste måten å gjøre dette på er å bruke python38Full.

pkgs ? import :
pkgs.mkShell
# nativeBuildInputs er vanligvis det du vil ha - verktøy du trenger for å kjøre
nativeBuildInputs = [pkgs.buildPackages.python38Full];

Dette kompilerer et miljø med alle deler av Python 3.8 som følger med NixOS. Hvis du vil minimere miljøet ditt, kan du velge bestemte deler. Du kan også legge til kildekoden eksternt med hentingsfunksjoner.

Python Flask

Et eksempel på webutvikling er en kolbe. Det er en veldig kraftig pakke for å lage websider, til og med veldig komplekse, uten mye anstrengelse. Siden Flask er et populært rammeverk, er det en klar NixOS-pakke for den. Filen for å kontrollere build for dette kalles standard.nix.

pkgs ? import :
pkgs.python38Pakker.buildPythonApplication
pname = "NixApp";
src = ./.;
versjon = "0.1";
propagatedBuildInputs = [pkgs.python38Pakker.kolbe];

Som du kan se, er det pakker fra nixpkgs som dekker kolben. Hvis du vil bruke noe annet, legger du dem til i parentes. Dette gjelder alle typer pakker som er inkludert i NixPkgs-depotet. Hvis pakken ikke eksisterer, bruk en fetcher.

Python-utvikling

Hvis du vil starte et Python-utviklingsmiljø, legger du til pakker du trenger i henhold til revisjon og andre.

med import ;
med pkgs.python37Pakker;
stdenv.mkDerivation
navn = "python-devel";
req = ./krav.tekst;
byggherre = "$ bash / bin / bash";
oppsett = ./ setup_venv.sh;
buildInputs = [
python37Full
python37Pakker.pip
];
system = innebygd.gjeldende system;
shellHook = "
SOURCE_DATE_EPOCH = $ (dato +% s)
";

I shellHook, mellom de doble apostrofene (”), kan du legge alle skript du liker. Igjen, tenk på hva som allerede kan eksistere, siden det er mange smarte mennesker der ute som allerede utvikler seg med NixOS.

JavaScript

Standardversjonen for å bruke JavaScript, eller mer presist, nodejs, er nix-skriptet nedenfor. Gi det navnet navnet.nix og plasser den i prosjektkatalogen din, og start deretter 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 trikset, selv om det er mye mer tilgjengelig. Du kan se hvordan du legger til et skript som du ellers ville kjørt manuelt. Bruk dette nøye og se etter komplette alternativer før du gjør dette.

Jupyter

Skriptet nedenfor initialiserer en katalog for å være vert for en rekke funksjoner der du kan kjøre Jupyter. De andre pakkene er for statistikk og maskinlæring. Du kan også fjerne og legge til etter dine behov.

med import ;
(
la
i python38.withPackages (ps: med ps; [geopandas ipython jupyter
jupyterlab matplotlib numpy pandas seaborn toolz])
).env

Konfigurasjoner

For din IDE, redaktør eller noe annet, virkelig, kan du også bake i innstillingene dine. For utviklere vil vim og Emacs være de første kandidatene for denne spesialiseringen. Vim har sitt eget sett med plugins tilgjengelig som nixpkgs.

Hentere

Grunnlaget for pakkene i NixOS er filer som peker til kilder og hva som er nødvendig for å kompilere pakkene. Du kan bruke dette hvis du mangler en pakke. Så lenge du finner kildepakken, kan du bruke en fetcher til å installere den. Standardfetcher henter tarballer, men heter fetchurl.

stdenv, fetchurl:
stdenv.mkDerivation
navn = "hei";
src = fetchurl
url = "http: // www.eksempel.org / hei.tjære.gz ";
sha256 = "1111111111111111111111111111111111111111111111111111";
;

Du kan bruke den slik den er i koden ovenfor. Du har også fetchgit og andre versjonskontrollsystemer. På toppen av dette er de viktigste git-tjenestene dekket med fetchFromGitHub, fetchFromGitLab og mer. Med alle disse hentingene, bør du kunne finne hvilken som helst pakke du vil ha til NixOS.

Konklusjon

Å bruke NixOS krever litt mer innsats enn andre distribusjoner. Når det er sagt, hvis du ønsker å utvikle programvare, er innsatsen verdt det. Du vil holde hovedsystemet ditt renere og kan hoppe mellom prosjekter uten å skape plagsomme konflikter mellom miljøer.

Mus Hvordan bruke Xdotool til å stimulere museklikk og tastetrykk i Linux
Hvordan bruke Xdotool til å stimulere museklikk og tastetrykk i Linux
Xdotool er et gratis og åpen kildekode kommandolinjeverktøy for å simulere museklikk og tastetrykk. Denne artikkelen vil dekke en kort guide om bruk a...
Mus Topp 5 ergonomiske datamuseprodukter for Linux
Topp 5 ergonomiske datamuseprodukter for Linux
Gir langvarig bruk av datamaskiner smerter i håndleddet eller fingrene? Lider du av stive ledd og må hele tiden riste på deg hendene? Føler du en bren...
Mus Hvordan endre mus og berøringsplateinnstillinger ved hjelp av Xinput i Linux
Hvordan endre mus og berøringsplateinnstillinger ved hjelp av Xinput i Linux
De fleste Linux-distribusjoner leveres med "libinput" -biblioteket som standard for å håndtere inngangshendelser på et system. Den kan behandle inngan...