Revizija Pakao
Svatko tko ovo pročita bit će upoznat s problemom Pythona korištenja druge verzije jezika. To je samo jedan eklatantan primjer u kojem su pogođeni čak i korisnici. To je zbog starih briljantnih projekata koji su prestali održavati softver. U mnogim drugim situacijama također vam je potrebna velika kontrola nad onim što se izvodi i koje su knjižnice dostupne. Programiranje na C i C ++ koristi knjižnice koje često trebaju biti točna verzija kada kompajlirate. U suprotnom ćete prepisivati dijelove softvera koje nikada niste namjeravali dodirnuti. Mnogi programeri koriste spremnik sa svim knjižnicama, a svi ostali radovi događaju se na glavnom računalu.
Popravak Nix
Kako se nix brine o ovom problemu? Pa, oni imaju sve datoteke u trgovini s hashovima kako bi identificirali točnu verziju. Okruženje koje ćete koristiti, a zatim povezati s knjižnicom ili izvršiti, nešto je što biste željeli koristiti za svoju trenutnu situaciju. Za pokrenut sustav tada možete koristiti mnoge verzije aplikacije, pa čak i knjižnice. Kada se želite razvijati, stvarate konfiguracijsku datoteku koja pokriva potrebe vašeg trenutnog projekta.
Datoteke za konfiguraciju
Kada instalirate NixOS, konfiguracija.nix će kontrolirati vaše okruženje za cijelo računalo. Uz to, možete ga kontrolirati u svakoj instanci svoje ljuske. Bez obzira imate li NixOS ili pokrećete bilo koju drugu distribuciju, možete koristiti drugu nix datoteku. Datoteka se naziva zadana.nix prema zadanim postavkama. To možete koristiti za izradu strukture direktorija koja ima određeno okruženje. Tok rada je stvaranje zadane nix datoteke koja odražava ono što želite da vaše okruženje podržava. Zatim promijenite direktorij i pokrenite nix-build, nakon čega slijedi izvođenje nix-ljuske. Također možete koristiti bilo koje ime datoteke ako ga navedete u naredbenom retku.
$ cd MyProject /$ nix-build # Jednom, kad ste nešto promijenili.
$ nix-ljuska zadana.nix
Podrazumijevat će se parametar za nix-ljusku, ali ako želite imati nekoliko u jednom direktoriju, tada možete koristiti prekidač. S postavljenim ispravnim vrijednostima, sada imate svoje okruženje isto svaki put kad pokrenete nix-shell. Ako premjestite nix datoteku, moći ćete je dobiti bilo gdje! Veliki problem postaje; što da stavim u nix datoteke?
Datoteke koriste Nixov izrazni jezik, to je gotovo programski jezik.
Nekoliko primjera
U nastavku slijedi nekoliko primjera koji vam mogu pomoći. Mnogo je više stvari koje možete učiniti za prilagodbu okoline. Ovo je dugo uzbudljivo putovanje, ali vjerojatno će vas usporiti od početka. Prije nego što stignete, upotrijebite kod drugih ljudi. Ovaj je popis kratak, pa potražite ideje na webu.
Piton
Kada želite stvoriti Python projekt, obično biste koristili virtualna okruženja. S Nixom to nije potrebno. Umjesto toga, možete stvoriti ljusku.nix datoteka koja deklarira koju verziju želite. Najjednostavniji način za to je korištenje python38Full.
pkgs ? uvozpkgs.mkShell
# nativeBuildInputs je obično ono što želite - alati koji su vam potrebni za pokretanje
nativeBuildInputs = [pkgs.buildPackages.python38Full];
Ovo sastavlja okruženje sa svim dijelovima Pythona 3.8 koji dolazi s NixOS-om. Ako želite minimalizirati svoje okruženje, možete odabrati njegove određene dijelove. Izvorni kod možete dodati i daljinski pomoću funkcija dohvaćanja.
Python tikvica
Primjer web razvoja je tikvica. To je vrlo moćan paket za izradu web stranica, čak i doista složenih, bez puno truda. Budući da je Flask popularan okvir, za njega postoji spreman NixOS paket. Datoteka za kontrolu gradnje za to naziva se zadana.nix.
pkgs ? uvozpkgs.python38Paketovi.buildPythonApplication
pname = "NixApp";
src = ./.;
inačica = "0.1 ";
propagatedBuildInputs = [pkgs.python38Paketi.tikvica];
Kao što vidite, postoje paketi od nixpkgs koji pokrivaju tikvicu. Ako želite upotrijebiti nešto drugo, dodajte ih unutar uglatih zagrada. To vrijedi za sve vrste paketa koji su uključeni u spremište NixPkgs. Ako paket ne postoji, upotrijebite dohvatač.
Razvoj Pythona
Ako želite pokrenuti Python razvojno okruženje, dodajete pakete potrebne prema reviziji i drugima.
s uvozoms pkgs.python37Paketovi;
stdenv.mkDerivacija
ime = "python-devel";
req = ./ zahtjevi.txt;
graditelj = "$ bash / bin / bash";
postava = ./ setup_venv.sh;
buildInputs = [
python37Full
python37Paketi.pip
];
sustav = ugrađeni.currentSystem;
shellHook = "
SOURCE_DATE_EPOCH = $ (datum +% s)
";
U shellHook, između dvostrukih apostrofa (”), možete staviti sve skripte koje želite. Opet, razmislite o tome što bi moglo već postojati, jer postoji mnogo pametnih ljudi koji se već razvijaju koristeći NixOS.
JavaScript
Standardna verzija za upotrebu JavaScript-a, ili preciznije, nodejs-a, je nix skripta u nastavku. Nazovite ga ljuskom.nix i smjestite ga u svoj direktorij projekta, a zatim započnite s naredbom nix-shell.
s uvozomstdenv.mkDerivacija
name = "čvor";
buildInputs = [
nodejs
];
shellHook = "
izvoz PATH = "$ PWD / node_modules /.kanta /: $ PATH "
";
Ovo je najjednostavniji, mogući trik, iako ih ima puno više. Možete vidjeti kako dodati skriptu koju biste inače pokrenuli ručno. Koristite ovo pažljivo i potražite potpune alternative prije nego što to učinite.
Jupyter
Skripta u nastavku inicijalizira direktorij za smještaj skupa funkcija u kojima možete pokrenuti Jupyter. Ostali su paketi za statistiku i strojno učenje. Također možete ukloniti i dodati prema svojim potrebama.
s uvozom(
neka
u python38.withPackages (ps: s ps; [geopandas ipython jupyter
jupyterlab matplotlib numpy pandas seaborn toolz])
).env
Konfiguracije
Za svoj IDE, uređivač ili bilo što drugo, u stvarnosti također možete ispeći u svojim postavkama. Za programere, vim i Emacs bit će prvi kandidati za ovu specijalizaciju. Vim ima svoj vlastiti dodatak dostupan kao nixpkgs.
Dohvatači
Temelj paketa u NixOS-u su datoteke koje upućuju na izvore i ono što je potrebno za sastavljanje paketa. To možete koristiti ako vam nedostaje paket. Sve dok možete pronaći izvorni paket, možete ga koristiti za dohvaćanje da biste ga instalirali. Standardni dohvatač dohvaća tarballe, ali se zove fetchurl.
stdenv, fetchurl:stdenv.mkDerivacija
name = "zdravo";
src = fetchurl
url = "http: // www.primjer.org / zdravo.katran.gz ";
sha256 = "11111111111111111111111111111111111111111111111111111111";
;
Možete ga koristiti onakvog kakav je u gornjem kodu. Također imate fetchgit i druge sustave za kontrolu verzija. Povrh svega, glavne git usluge pokrivene su fetchFromGitHub, fetchFromGitLab i mnogim drugim. Uz sve ove dohvatače, trebali biste moći pronaći bilo koji paket koji želite za NixOS.
Zaključak
Korištenje NixOS-a zahtijeva malo više napora od ostalih distribucija. Kad to kažete, ako želite razvijati softver, trud se isplati. Vaš ćete glavni sustav održavati čišćim i možete skakati između projekata bez stvaranja problematičnih sukoba između okolina.