NixOS

Ambienti di sviluppo NixOS

Ambienti di sviluppo NixOS
Durante lo sviluppo e l'esecuzione di software, e molte volte, è necessario un set di librerie molto particolare nel proprio ambiente. Raggiungi questo obiettivo con ambienti virtuali, contenitori e altri trucchi. Tuttavia, non hai necessariamente bisogno di tutto ciò. Un caso comune è quando programmi in Python, devi scegliere tra le due versioni grandi. Ciò ha causato molti grattacapi sia agli utenti che agli sviluppatori. Puoi evitare tutto questo se le tue librerie sono designate, specialmente per una corsa. Questo può sembrare impossibile o non necessario, ma è molto conveniente per casi d'uso e sviluppo rari.

Inferno di revisione

Chiunque legga questo avrà familiarità con il problema di Python relativo all'utilizzo di una versione diversa del linguaggio. Questo è solo un esempio lampante in cui anche gli utenti sono interessati. Ciò è dovuto a vecchi progetti brillanti che hanno smesso di mantenere il software. In molte altre situazioni, hai anche bisogno di un grande controllo su ciò che è in esecuzione e su quali librerie sono disponibili. La programmazione in C e C++ utilizza librerie che spesso devono essere la versione esatta al momento della compilazione. Altrimenti, riscriverai parti del software che non avresti mai voluto toccare. Molti sviluppatori usano un contenitore con tutte le librerie e tutti gli altri lavori avvengono sul computer host.

La soluzione del Nix

In che modo nix si prende cura di questo problema?? Bene, hanno tutti i file in un negozio con hash per identificare la versione esatta. L'ambiente che utilizzerai, quindi ti collegherai alla libreria o eseguirai, è qualcosa che vorresti usare per la tua situazione attuale. Per un sistema in esecuzione, puoi quindi utilizzare molte versioni di un'applicazione e persino librerie. Quando vuoi sviluppare, crei un file di configurazione che copre le esigenze del tuo progetto attuale.

File di configurazione

Quando hai installato NixOS, la configurazione.nix controllerà il tuo ambiente per l'intero computer. Detto questo, puoi controllarlo in ogni istanza della tua shell. Indipendentemente dal fatto che tu abbia NixOS o esegua qualsiasi altra distribuzione, puoi utilizzare un altro file nix. Il file si chiama default.nix per impostazione predefinita. Puoi usarlo per creare una struttura di directory con un ambiente particolare. Il flusso di lavoro consiste nel creare il file nix predefinito per riflettere ciò che desideri che il tuo ambiente supporti. Quindi cambia la directory ed esegui nix-build, seguito da nix-shell. Puoi anche usare qualsiasi nome per il file se lo specifichi nella riga di comando.

$ cd Il mio progetto/
$ nix-build # Una volta, quando hai cambiato qualcosa.
$ nix-shell default.no

Il parametro per nix-shell sarà implicito, ma se vuoi averne diversi in una directory, puoi usare l'interruttore. Con i valori corretti impostati, ora hai lo stesso ambiente ogni volta che avvii nix-shell. Se sposti il ​​file nix, sarai in grado di ottenere lo stesso ovunque! Il grande problema diventa; cosa metto nei file nix?

I file usano il linguaggio di espressione Nix, è quasi un linguaggio di programmazione.

Alcuni esempi

Di seguito, ci sono alcuni esempi che possono aiutarti. Ci sono molte altre cose che puoi fare per modificare il tuo ambiente. Questo è un lungo viaggio emozionante, ma probabilmente ti rallenterà dall'inizio. Prima di arrivarci, usa il codice di altre persone. Questo elenco è breve, quindi cerca idee sul Web.

Pitone

Quando vuoi creare un progetto Python, normalmente useresti ambienti virtuali. Con Nix, questo non è necessario. Invece, puoi creare una shell.nix file che dichiara quale versione si desidera. Il modo più semplice per farlo è usare python38Full.

pacchetti ? importare :
pacchetti.mkShell
# nativeBuildInputs di solito è quello che vuoi: gli strumenti che devi eseguire
nativeBuildInputs = [ pkgs.buildPackages.python38Full];

Questo compila un ambiente con tutte le parti di Python 3.8 fornito con NixOS. Se vuoi minimizzare il tuo ambiente, puoi scegliere le sue parti particolari. Puoi anche aggiungere il tuo codice sorgente da remoto con le funzioni di recupero.

Flacone di pitone

Un esempio di sviluppo web è un pallone. È un pacchetto molto potente per realizzare pagine web, anche molto complesse, senza troppi sforzi. Poiché Flask è un framework popolare, esiste un pacchetto NixOS pronto per questo. Il file per controllare la build per questo è chiamato default.no.

pacchetti ? importare :
pacchetti.python38Pacchetti.buildPythonApplication
pname = "NixApp";
src = ./.;
versione = "0.1";
propagatedBuildInputs = [ pkgs.python38Pacchetti.borraccia ];

Come puoi vedere, ci sono pacchetti di nixpkgs che coprono flask. Se vuoi usare qualcos'altro, aggiungile all'interno delle parentesi quadre. Questo vale per tutti i tipi di pacchetti inclusi nel repository NixPkgs. Se il pacchetto non esiste, usa un fetcher.

Sviluppo Python

Se vuoi avviare un ambiente di sviluppo Python, aggiungi i pacchetti di cui hai bisogno in base alla revisione e ad altri.

con importazione ;
con pacchetti.python37Pacchetti;
stdenv.mkDerivation
name = "python-devel";
req = ./requisiti.TXT;
costruttore = "$bash/bin/bash";
configurazione = ./setup_venv.sh;
buildInputs = [
python37Full
python37Pacchetti.pip
];
sistema = built-in.sistema corrente;
shellHook = "
SOURCE_DATE_EPOCH=$(data +%s)
";

Nello shellHook, tra i doppi apostrofi (""), puoi inserire qualsiasi script che ti piace. Ancora una volta, pensa a ciò che potrebbe già esistere, poiché ci sono molte persone intelligenti là fuori che stanno già sviluppando utilizzando NixOS.

JavaScript

La versione standard per utilizzare JavaScript, o più precisamente nodejs, è lo script nix di seguito. Chiamalo conchiglia.nix e posizionalo nella directory del tuo progetto, quindi inizia con il comando nix-shell.

con importazione ;
stdenv.mkDerivation
nome = "nodo";
buildInputs = [
nodejs
];
shellHook = "
export PATH="$PWD/node_modules/.bin/:$PERCORSO"
";

Questo è il trucco più semplice possibile, anche se ce ne sono molti altri disponibili. Puoi vedere come aggiungere uno script che altrimenti eseguiresti manualmente. Usalo con attenzione e cerca alternative complete prima di farlo.

Giove

Lo script seguente inizializza una directory per ospitare un batch di funzioni in cui è possibile eseguire Jupyter. Gli altri pacchetti sono per le statistiche e l'apprendimento automatico. Puoi anche rimuovere e aggiungere in base alle tue esigenze.

con importazione ;
(
permettere
in pitone38.withPackages (ps: with ps; [ geopandas ipython jupyter
jupyterlab matplotlib numpy panda seaborn toolz])
).env

Configurazioni

Per il tuo IDE, editor o qualsiasi altra cosa, puoi anche inserire le tue impostazioni. Per gli sviluppatori, vim ed Emacs saranno i primi candidati a questa specializzazione. Vim ha il proprio set di plugin disponibili come nixpkgs.

recuperatori

La base dei pacchetti in NixOS sono i file che puntano alle fonti e ciò che è necessario per compilare i pacchetti. Puoi usarlo se ti manca un pacchetto. Finché riesci a trovare il pacchetto sorgente, puoi usare un fetcher per installarlo. Il fetcher standard recupera i tarball ma si chiama fetchurl.

stdenv, fetchurl:
stdenv.mkDerivation
nome = "ciao";
src = fetchurl
url = "http://www.esempio.org/ciao.catrame.gz";
sha256 = "111111111111111111111111111111111111111111111111111111";
;

Puoi usarlo così com'è nel codice sopra. Hai anche fetchgit e altri sistemi di controllo della versione. Inoltre, i principali servizi git sono coperti con fetchFromGitHub, fetchFromGitLab e altro. Con tutti questi recuperatori, dovresti essere in grado di trovare qualsiasi pacchetto desideri per NixOS.

Conclusione

L'uso di NixOS richiede un po' più di impegno rispetto ad altre distribuzioni. Detto questo, se vuoi sviluppare software, ne vale la pena. Manterrai il tuo sistema principale più pulito e potrai saltare tra i progetti senza creare fastidiosi conflitti tra gli ambienti.

Come aumentare gli FPS in Linux?
FPS sta per Fotogrammi al secondo. Il compito dell'FPS è misurare il frame rate nelle riproduzioni video o nelle prestazioni di gioco game. In parole ...
I migliori giochi di laboratorio dell'app Oculus
Se possiedi un visore Oculus, devi essere informato sul sideloading. Il sideloading è il processo di installazione di contenuti non archiviati sul vis...
I 10 migliori giochi da giocare su Ubuntu
La piattaforma Windows è stata una delle piattaforme dominanti per i giochi a causa dell'enorme percentuale di giochi che si stanno sviluppando oggi p...