Infierno de revisión
Cualquiera que lea esto estará familiarizado con el problema de Python de usar una versión diferente del lenguaje. Ese es solo un ejemplo evidente en el que incluso los usuarios se ven afectados. Esto se debe a viejos proyectos brillantes que han dejado de mantener el software. En muchas otras situaciones, también necesita un gran control sobre lo que se está ejecutando y las bibliotecas disponibles. La programación en C y C ++ usa bibliotecas que a menudo deben tener la versión exacta cuando compila. De lo contrario, volverá a escribir partes del software que nunca tuvo la intención de tocar. Muchos desarrolladores usan un contenedor con todas las bibliotecas, y todos los demás trabajos ocurren en la computadora host.
La solución Nix
¿Cómo se ocupa nix de este problema?? Bueno, tienen todos los archivos en una tienda con hashes para identificar la versión exacta. El entorno que va a usar, luego vincular a la biblioteca o ejecutar, es algo que le gustaría usar para su situación actual. Para un sistema en ejecución, puede usar muchas versiones de una aplicación e incluso bibliotecas. Cuando quieras desarrollar, creas un archivo de configuración que cubre las necesidades de tu proyecto actual.
Archivos de configuración
Cuando tenga NixOS instalado, la configuración.nix controlará su entorno para toda la computadora. Dicho esto, puedes controlarlo en cada instancia de tu caparazón. Independientemente de si tiene NixOS o ejecuta cualquier otra distribución, puede usar otro archivo nix. El archivo se llama predeterminado.nix por defecto. Puede usar esto para crear una estructura de directorio que tenga un entorno particular. El flujo de trabajo es crear el archivo nix predeterminado para reflejar lo que desea que admita su entorno. Luego cambie el directorio y ejecute nix-build, seguido de ejecutar nix-shell. También puede usar cualquier nombre para el archivo si lo especifica en la línea de comando.
$ cd MiProyecto /$ nix-build # Una vez, cuando hayas cambiado algo.
$ nix-shell predeterminado.nada
El parámetro para nix-shell estará implícito, pero si desea tener varios en un directorio, puede usar el interruptor. Con los valores correctos establecidos, ahora su entorno es el mismo cada vez que inicia nix-shell. Si mueve el archivo nix, podrá obtener lo mismo en cualquier lugar! El gran problema se convierte en; que pongo en los archivos nix?
Los archivos usan el lenguaje de expresión Nix, es casi un lenguaje de programación.
Algunos ejemplos
A continuación, hay algunos ejemplos que pueden ayudarlo. Hay muchas más cosas que puede hacer para modificar su entorno. Este es un viaje largo y emocionante, pero probablemente lo ralentizará desde el principio. Antes de llegar, use el código de otras personas. Esta lista es corta, así que busque ideas en la Web.
Pitón
Cuando desee crear un proyecto de Python, normalmente usaría entornos virtuales. Con Nix, esto no es necesario. En su lugar, puede crear un caparazón.nix archivo que declara qué versión desea. La forma más sencilla de hacer esto es usar python38Full.
paquetes ? importarpkgs.mkShell
# nativeBuildInputs es normalmente lo que desea: herramientas que necesita para ejecutar
nativeBuildInputs = [pkgs.buildPackages.python38Full];
Esto compila un entorno con todas las partes de Python 3.8 que viene con NixOS. Si desea minimizar su entorno, puede elegir sus partes particulares. También puede agregar su código fuente de forma remota con funciones de recuperación.
Matraz de Python
Un ejemplo de desarrollo web es un matraz. Es un paquete muy poderoso para hacer páginas web, incluso las realmente complejas, sin mucho esfuerzo. Dado que Flask es un marco popular, hay un paquete NixOS listo para él. El archivo para controlar la compilación para esto se llama predeterminado.nada.
paquetes ? importarpkgs.python38 Paquetes.buildPythonApplication
pname = "NixApp";
src = ./.;
versión = "0.1 ";
propagatedBuildInputs = [pkgs.python38 Paquetes.matraz];
Como puede ver, hay paquetes de nixpkgs que cubren el matraz. Si desea usar otra cosa, agréguela dentro de los corchetes. Esto se aplica a todos los tipos de paquetes que se incluyen en el repositorio de NixPkgs. Si el paquete no existe, use un buscador.
Desarrollo de Python
Si desea iniciar un entorno de desarrollo de Python, agregue los paquetes que necesita de acuerdo con la revisión y otros.
con importacióncon paquetes.python37Packages;
stdenv.mkDerivation
nombre = "python-devel";
req = ./ requisitos.TXT;
constructor = "$ bash / bin / bash";
configuración = ./ setup_venv.sh;
buildInputs = [
python37Full
python37 Paquetes.pepita
];
system = incorporados.sistema actual;
shellHook = "
SOURCE_DATE_EPOCH = $ (fecha +% s)
";
En el shellHook, entre los apóstrofos dobles ("), puede poner los scripts que desee. Nuevamente, piense en lo que podría existir, ya que hay muchas personas inteligentes que ya se están desarrollando con NixOS.
JavaScript
La versión estándar para usar JavaScript, o más precisamente, nodejs, es el script nix a continuación. Nómbralo shell.nix y colóquelo en el directorio de su proyecto, luego comience con el comando nix-shell.
con importaciónstdenv.mkDerivation
nombre = "nodo";
buildInputs = [
nodejs
];
shellHook = "
export PATH = "$ PWD / node_modules /.bin /: $ PATH "
";
Este es el truco más simple y posible, aunque hay muchos más disponibles. Puede ver cómo agregar un script que de otro modo ejecutaría manualmente. Use esto con cuidado y busque alternativas completas antes de hacer esto.
Jupyter
El siguiente script inicializa un directorio para alojar un lote de funciones donde puede ejecutar Jupyter. Los otros paquetes son para estadísticas y aprendizaje automático. También puede eliminar y agregar según sus necesidades.
con importación(
dejar
en python38.withPackages (ps: con ps; [geopandas ipython jupyter
jupyterlab matplotlib numpy pandas seaborn toolz])
).env
Configuraciones
Para su IDE, editor o cualquier cosa, en realidad, también puede hornear en su configuración. Para los desarrolladores, vim y Emacs serán los primeros candidatos para esta especialización. Vim tiene su propio conjunto de complementos disponibles como nixpkgs.
Buscadores
La base de los paquetes en NixOS son archivos que apuntan a las fuentes y lo que se necesita para compilar los paquetes. Puede usar esto si le falta un paquete. Siempre que pueda encontrar el paquete fuente, puede usar un buscador para instalarlo. El buscador estándar obtiene archivos tar pero se llama fetchurl.
stdenv, fetchurl:stdenv.mkDerivation
nombre = "hola";
src = fetchurl
url = "http: // www.ejemplo.org / hola.alquitrán.gz ";
sha256 = "11111111111111111111111111111111111111111111111111";
;
Puede usarlo como está en el código anterior. También tienes fetchgit y otros sistemas de control de versiones. Además de esto, los principales servicios de git están cubiertos con fetchFromGitHub, fetchFromGitLab y más. Con todos estos buscadores, debería poder encontrar cualquier paquete que desee para NixOS.
Conclusión
Usar NixOS requiere un poco más de esfuerzo que otras distribuciones. Dicho esto, si desea desarrollar software, el esfuerzo vale la pena. Mantendrá su sistema principal más limpio y podrá saltar entre proyectos sin crear conflictos problemáticos entre entornos.