NixOS

NixOS utvecklingsmiljöer

NixOS utvecklingsmiljöer
När du utvecklar och kör programvara och många gånger behöver du en mycket speciell uppsättning bibliotek i din miljö. Du uppnår detta med virtuella miljöer, behållare och andra knep. Men du behöver inte nödvändigtvis allt detta. Ett vanligt fall är när du programmerar i Python måste du välja mellan de två stora versionerna. Detta har orsakat många huvudvärk för både användare och utvecklare. Du kan undvika allt detta om dina bibliotek är utsedda, särskilt för en körning. Detta kan låta omöjligt eller onödigt, men det är mycket bekvämt för sällsynta användningsfall och utveckling.

Revision helvete

Den som läser detta kommer att känna till Python-frågan om att använda en annan version av språket. Det är bara ett uppenbart exempel där även användare påverkas. Detta beror på gamla lysande projekt som har slutat underhålla programvaran. I många andra situationer behöver du också stor kontroll över vad som körs och vilka bibliotek som finns tillgängliga. Programmering i C och C ++ använder bibliotek som ofta behöver vara den exakta versionen när du kompilerar. Annars kommer du att skriva om delar av programvaran som du aldrig tänkt att röra vid. Många utvecklare använder en container med alla bibliotek, och alla andra verk händer på värddatorn.

Nix Fix

Hur hanterar nix detta problem? De har alla filer i en butik med hash för att identifiera den exakta versionen. Miljön du ska använda, sedan länka till biblioteket eller utföra, är något du vill använda för din nuvarande situation. För ett löpande system kan du sedan använda många versioner av ett program och till och med bibliotek. När du vill utveckla skapar du en konfigurationsfil som täcker behoven i ditt nuvarande projekt.

Konfigurationsfiler

När du har installerat NixOS konfigurationen.nix kontrollerar din miljö för hela datorn. Med det sagt kan du styra det i alla fall av ditt skal. Oavsett om du har NixOS eller kör någon annan distribution kan du använda en annan nix-fil. Filen kallas standard.nix som standard. Du kan använda detta för att skapa en katalogstruktur som har en viss miljö. Arbetsflödet är att skapa standard-nix-filen för att återspegla vad du vill att din miljö ska stödja. Ändra sedan katalogen och kör nix-build, följt av att köra nix-shell. Du kan också använda valfritt namn för filen om du anger det på kommandoraden.

$ cd MyProject /
$ nix-build # En gång, när du har ändrat något.
$ nix-shell-standard.nix

Parametern för nix-shell kommer att vara underförstådd, men om du vill ha flera i en katalog kan du använda omkopplaren. Med rätt inställda värden har du nu samma miljö varje gång du startar nix-shell. Om du flyttar nix-filen kommer du att kunna få samma var som helst! Den stora frågan blir; vad lägger jag i nix-filerna?

Filerna använder Nix-uttrycksspråket, det är nästan ett programmeringsspråk.

Några exempel

Nedan finns några exempel som kan hjälpa dig. Det finns många fler saker du kan göra för att anpassa din miljö. Det här är en lång spännande resa, men det kommer förmodligen att sakta ner dig från början. Använd andras kod innan du kommer dit. Den här listan är kort, så leta efter idéer på nätet.

Pytonorm

När du vill skapa ett Python-projekt använder du normalt virtuella miljöer. Med Nix är detta inte nödvändigt. Istället kan du skapa ett skal.nix-fil som förklarar vilken version du vill ha. Det enklaste sättet att göra detta är att använda python38Full.

pkgs ? importera :
pkgs.mkShell
# nativeBuildInputs är vanligtvis vad du vill ha - verktyg du behöver för att köra
nativeBuildInputs = [pkgs.buildPackages.python38Full];

Detta sammanställer en miljö med alla delar av Python 3.8 som kommer med NixOS. Om du vill minimera din miljö kan du välja dess specifika delar. Du kan också lägga till din källkod på distans med hämtningsfunktioner.

Python Flask

Ett exempel på webbutveckling är en kolv. Det är ett mycket kraftfullt paket för att skapa webbsidor, till och med riktigt komplexa, utan mycket ansträngning. Eftersom Flask är ett populärt ramverk finns det ett klart NixOS-paket för det. Filen för att styra byggnaden för detta kallas standard.nix.

pkgs ? importera :
pkgs.python38Packages.buildPythonApplication
pname = "NixApp";
src = ./.;
version = "0.1 ";
propagatedBuildInputs = [pkgs.python38Packages.flaska ];

Som du kan se finns det paket från nixpkgs som täcker kolven. Om du vill använda något annat lägger du till dem inom hakparenteserna. Detta gäller alla typer av paket som ingår i NixPkgs-förvaret. Om paketet inte finns ska du använda en fetcher.

Python-utveckling

Om du vill starta en Python-utvecklingsmiljö lägger du till paket du behöver enligt revision och andra.

med import ;
med pkgs.python37Packages;
stdenv.mkDerivation
namn = "python-devel";
req = ./krav.Text;
byggare = "$ bash / bin / bash";
inställning = ./ setup_venv.sh;
buildInputs = [
python37Full
python37Packages.pip
];
system = inbyggda.nuvarande systemet;
shellHook = "
SOURCE_DATE_EPOCH = $ (datum +% s)
";

I shellHook, mellan de dubbla apostroferna (”), kan du placera alla skript du gillar. Återigen, tänk på vad som redan kan existera, eftersom det finns många smarta människor där ute som redan utvecklas med NixOS.

JavaScript

Standardversionen för att använda JavaScript, eller mer exakt, nodejs, är nix-skriptet nedan. Namnge det skal.nix och placera den i din projektkatalog och börja sedan med kommandot nix-shell.

med import ;
stdenv.mkDerivation
namn = "nod";
buildInputs = [
nodjs
];
shellHook = "
exportera PATH = "$ PWD / node_modules /.bin /: $ PATH "
";

Detta är det enklaste, möjliga tricket, även om det finns mycket mer tillgängligt. Du kan se hur du lägger till ett skript som du annars skulle köra manuellt. Använd detta noggrant och leta efter fullständiga alternativ innan du gör det.

Jupyter

Skriptet nedan initialiserar en katalog för att vara värd för ett antal funktioner där du kan köra Jupyter. De andra paketen är för statistik och maskininlärning. Du kan också ta bort och lägga till efter dina behov.

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

Konfigurationer

För din IDE, redaktör eller något annat, kan du också baka i dina inställningar. För utvecklare är vim och Emacs de första kandidaterna för denna specialisering. Vim har sin egen uppsättning plugins tillgängliga som nixpkgs.

Hämtare

Grunden för paketen i NixOS är filer som pekar på källor och vad som behövs för att kompilera paketen. Du kan använda detta om du saknar ett paket. Så länge du kan hitta källkodspaketet kan du använda en fetcher för att installera det. Standardfetern hämtar tarbollar men heter fetchurl.

stdenv, fetchurl:
stdenv.mkDerivation
namn = "hej";
src = fetchurl
url = "http: // www.exempel.org / hej.tjära.gz ";
sha256 = "1111111111111111111111111111111111111111111111111111";
;

Du kan använda den som den är i ovanstående kod. Du har också fetchgit och andra versionskontrollsystem. Utöver detta täcks de viktigaste git-tjänsterna med fetchFromGitHub, fetchFromGitLab och mer. Med alla dessa hämtare borde du kunna hitta vilket paket du vill ha för NixOS.

Slutsats

Att använda NixOS kräver lite mer ansträngning än andra distributioner. Med detta sagt, om du vill utveckla programvara, är ansträngningen värt det. Du kommer att hålla ditt huvudsystem renare och kan hoppa mellan projekt utan att skapa besvärliga konflikter mellan miljöer.

Hur man utvecklar ett spel på Linux
För ett decennium sedan skulle inte många Linux-användare förutsäga att deras favoritoperativsystem en dag skulle vara en populär spelplattform för ko...
Portar med öppen källkod för kommersiella spelmotorer
Gratis, öppen källkod och plattformsmekaniska rekreationer kan användas för att spela gamla såväl som några av de ganska senaste speltitlarna. I den h...
Bästa kommandoradsspel för Linux
Kommandoraden är inte bara din största allierade när du använder Linux, det kan också vara källan till underhållning eftersom du kan använda den för a...