
¿Alguna vez ha tenido problemas con conflictos de versiones de software entre proyectos? caparazón de los knicks ¡poder ayudar! Nix-shell le permite Cree un entorno de desarrollo personalizado Para cada proyecto, se proporcionan todas las herramientas y bibliotecas necesarias.
Estos entornos están aislados, lo que significa que no interfieren con otros proyectos del sistema. Este enfoque mantiene el flujo de trabajo de desarrollo fluido y evita el dolor de cabeza del «infierno de dependencia» causado por los conflictos de software.
Nix-shell facilita la configuración de estos entornos y el cambio entre ellos, lo que garantiza configuraciones consistentes en todas las máquinas. Esto puede ahorrarle a usted y a su equipo mucho tiempo.
En esta guía, lo guiaremos a través de los siguientes pasos. Utilice nix-shell para establecer y gestionar un entorno de desarrollo aislado en linux.
¿Qué es nix-shell?
Mella Es un potente administrador de paquetes y sistema de compilación que proporciona un enfoque funcional y declarativo para gestionar las dependencias de software. Utiliza un enfoque puramente funcional, tratando los paquetes como valores en un lenguaje de programación funcional.
caparazón de los knickses una utilidad de línea de comandos incluida con el administrador de paquetes Nix que le permite configurar un entorno de desarrollo aislado basado en expresiones Nix. Estos entornos encapsulan todas las herramientas, bibliotecas y dependencias necesarias para un proyecto específico.
Al construir cada dependencia de forma independiente y evitar interferencias, nix-shell elimina el «infierno de dependencias» y proporciona un control preciso sobre las dependencias en los entornos de desarrollo y producción.
Este aislamiento y repetibilidad garantiza una configuración coherente entre diferentes sistemas y permite una colaboración fluida entre desarrolladores.
Ventajas de usar Nix-shell
- aislamiento: cada
nix-shell
Los entornos están aislados de su sistema y de otros entornos, lo que evita conflictos entre dependencias. - Reproducibilidad: Los entornos se definen en código, lo que garantiza que sean reproducibles en cualquier sistema que ejecute Nix.
- Actualizaciones y reversiones atómicas: El enfoque de Nix para la gestión de paquetes admite actualizaciones y reversiones atómicas, lo que permite probar diferentes dependencias de forma segura.
- Probar paquetes sin instalarlos:Una de las características útiles de Nix Package Manager es que permite a los usuarios probar paquetes sin instalarlos localmente. Esto es útil cuando desea utilizar una aplicación específica temporalmente.
Cómo utilizar Nix-shell para establecer y gestionar un entorno de desarrollo
Como se mencionó anteriormente, nix-shell crea entornos separados y reproducibles para las dependencias del proyecto. Este aislamiento evita conflictos entre dependencias de diferentes proyectos.
A continuación se explica cómo utilizar nix-shell para configurar y gestionar un entorno de desarrollo.
Crear expresiones Nix
El primer paso es crear una expresión Nix para describir las dependencias requeridas por el proyecto.Esto generalmente se hace en un archivo llamado default.nix
o shell.nix
en el directorio raíz de su proyecto.
Creemos un proyecto de muestra llamado myproject
.
$ mkdir myproject
cd entrar myproject
Tabla de contenido:
$ cd myproject
Crea un sencillo shell.nix
documento:
$ nano shell.nix
Agregue las siguientes líneas:
{ pkgs ? import{} }: pkgs.mkShell { buildInputs = [ pkgs.python38 pkgs.nodejs pkgs.ruby ]; }
Este archivo declara un entorno de desarrollo. Pitón 3.8, Nodo.js y rubí como dependencia.cuando corres nix-shell
En el directorio que contiene este archivo, Nix descargará e instalará estos paquetes en un entorno aislado sin afectar los paquetes de todo el sistema.
También puedes especificar dependencias en una sola línea, así:
{ pkgs ? import{} }:
pkgs.mkShell {
buildInputs = with pkgs.buildPackages; [ python38 nodejs ruby ];
}
Guarde el archivo y ciérrelo.
ambiente temporal
Para un entorno de desarrollo rápido y temporal, puede hacer
nix-shell
y-p
Al logotipo le sigue el paquete que necesita. Por ejemplo:nix-shell -p python39Packages.numpy python39Packages.scipyEste comando inicia un
nix-shell
Proporciona Python 3.9, NumPy y SciPy.
Ingrese al shell Nix
Una vez que tenga la expresión Nix, puede ingresar al entorno de aislamiento usando:
$ nix-shell
o,
$ nix-shell shell.nix
Para garantizar que las herramientas instaladas en el sistema no interfieran con sus dependencias definidas, utilice --pure
Opciones y nix-shell.
$ nix-shell --pure shell.nix
Esto establecerá una nueva sesión de shell con las dependencias especificadas disponibles (Python 3.8, Node.js y Ruby). Cualquier comando que ejecute en este shell puede acceder al entorno de aislamiento.
Desarrollar usando Nix-shell
En un entorno nix-shell, puede ejecutar herramientas de desarrollo, scripts y comandos como de costumbre.
Un entorno aislado garantiza que las dependencias de un proyecto estén disponibles y sean consistentes independientemente de la configuración del sistema host.
Puedes verificarlo comprobando la versión de dependencia:
[nix-shell:~/myproject]$ python -V Python 3.8.19
[nix-shell:~/myproject]$ node -v v18.19.1
[nix-shell:~/myproject]$ ruby -v ruby 3.1.4p223 (2023-03-30 revision 957bb7cb81) [x86_64-linux]
Como puede ver en el resultado anterior, el entorno de desarrollo está listo. Pitón 3.8.19, Nodo 18.19.1 y Rubí 3.1.4 Instalar. Ahora puede comenzar a crear y probar su aplicación.
Salir de Nix-shell
Para salir de nix-shell, simplemente escriba:
$ exit
O puedes presionar CTRL+D
Sal del caparazón.
cuando sales nix-shell
ambiente ocurre lo siguiente:
- Termina el aislamiento ambiental: Entorno de desarrollo aislado establecido
nix-shell
Es temporal y existe sólo durante la sesión del shell.una vez que cierres la sesiónnix-shell
se eliminará el aislamiento proporcionado por ese entorno y su shell volverá a su estado anterior. - Paquetes y dependencias desinstaladas.: Todos los paquetes, dependencias y variables de entorno que están cargados y disponibles en
nix-shell
El entorno se ha desinstalado y ya no se puede acceder a él desde el shell. Cualquier comando o herramienta que dependa de estos paquetes ya no funcionará a menos que se instale en todo el sistema o en otro entorno. - Recuperación del entorno Shell: El entorno del shell, incluida la RUTA, las variables de entorno y otras configuraciones, se restaura al estado anterior a la entrada.
nix-shell
.Cualquier cambio en esta configuraciónnix-shell
Está revocado. - no hay cambios en curso: Por defecto,
nix-shell
No se realizarán cambios permanentes en su sistema.Aislamiento interno y cambio.nix-shell
El entorno es temporal y no afecta la configuración de todo el sistema ni los paquetes instalados. - Estado del proyecto: cualquier archivo o cambio que realice en
nix-shell
entorno, como la creación o modificación de archivos en el directorio del proyecto, persistirá incluso después de salirnix-shell
. Sólo el entorno en sí es temporal, los archivos en los que trabaja no lo son. - recolección de basura: Con el tiempo, a medida que utilice más paquetes y posiblemente los actualice, la tienda Nix puede crecer en tamaño porque conserva versiones anteriores de los paquetes. Estos paquetes y entornos seguirán siendo accesibles hasta que se realice la recolección de basura de Nix.abandonar
nix-shell
La recolección de basura no se activa automáticamente. Puede iniciar manualmente la recolección de basura para eliminar los paquetes no utilizados del almacenamiento de Nix, liberando así espacio en el disco.Por favor consulte nuestro Comience con los Knicks Obtenga una guía sobre cómo limpiar el kit no utilizado.
Para resumir, salir nix-shell
Lo separa limpiamente del entorno de desarrollo temporal que proporciona sin afectar el entorno global del sistema ni eliminar ningún dato del proyecto. Los paquetes de software usados se conservan en la tienda de Nix para una reutilización eficiente, lo que garantiza que su sistema permanezca limpio y que su entorno de desarrollo sea repetible y aislado.
Si necesita volver a utilizar el mismo entorno de desarrollo, simplemente vuelva a ingresar nix-shell
mediante la ejecución nix-shell
comando desde el mismo directorio que contiene su shell.nix
documento. Esto restablecerá el entorno aislado con las dependencias especificadas.
preguntas frecuentes
La siguiente es una lista de preguntas frecuentes (FAQ) y respuestas sobre Nix.
nix-shell
?A: nix-shell
Es una herramienta de línea de comandos proporcionada por el administrador de paquetes Nix, que se utiliza para crear un entorno de shell temporal donde se instalan paquetes de software específicos. Está diseñado para proporcionar un entorno aislado para desarrollo o pruebas sin afectar al resto del sistema.
nix-shell
?A: nix-shell
Parte del administrador de paquetes de Nix.usar nix-shell
, primero debes instalar Nix en tu sistema. Puede consultar Instalar Nix Nuestra guía de instalación de Nix.
nix-shell
¿Crear un ambiente aislado?Respuesta: Para establecer un entorno aislado, puede utilizar shell.nix
Los archivos en el directorio del proyecto especifican las dependencias requeridas.correr nix-shell
en el directorio que lo contiene shell.nix
lo colocará en un shell con las dependencias disponibles.Alternativamente, para un entorno de ensayo puede utilizar nix-shell -p package1 package2 ...
Especifique el paquete directamente.
nix-shell
¿En cualquier sistema operativo?A: nix-shell
Funciona con la mayoría de los sistemas operativos tipo Unix, incluidas las distribuciones de Linux y macOS. Windows no lo admite de forma nativa, pero los usuarios de Windows pueden acceder a él a través del Subsistema de Windows para Linux (WSL).
nix-shell
?Respuesta: Cuando cierras la sesión nix-shell
, el entorno que creó fue desmantelado. Las adiciones temporales a PATH y otras variables de entorno se restauran, devolviendo el shell a su estado anterior.Los paquetes usados permanecen en la tienda Nix para uso futuro, pero ya no se puede acceder a ellos externamente. nix-shell
A menos que esté instalado globalmente.
nix-shell
¿Evitar el «infierno de la dependencia»?A: nix-shell
Utilice el enfoque puramente funcional de Nix Package Manager para la gestión de paquetes, donde cada paquete se construye y almacena en un entorno aislado. Las dependencias de cada paquete están claramente definidas y no interfieren entre sí, evitando así el problema común de los conflictos de dependencia.
nix-shell
¿ambiente?Un rato nix-shell
No salva directamente el estado del medio ambiente. La naturaleza declarativa del medio ambiente. shell.nix
La documentación significa que su entorno es reproducible.Alguien en la misma situacion shell.nix
Se puede restablecer el mismo entorno. Para escenarios más complejos, considere utilizar las capacidades de Nix para crear paquetes personalizados o incluso configuraciones completas del sistema.
nix-shell
¿ambiente?R: Para modificar los paquetes en su entorno, edite shell.nix
archivo para agregar o eliminar paquetes buildInputs
listado en shell.nix
documento.Si está utilizando un entorno temporal establecido mediante -p
simplemente ajuste la lista de paquetes que proporciona al comando.
Respuesta: Nix le permite realizar manualmente la recolección de basura para eliminar paquetes no utilizados del almacenamiento de Nix, liberando así espacio en disco.Puedes hacer esto ejecutando nix-collect-garbage -d
desde la línea de comando.
en conclusión
Nix-shell te ayuda a mantener tu desarrollo organizado. Le permite crear espacios de trabajo separados para cada proyecto y acceder a todas las herramientas que necesitan. Esto evita conflictos entre proyectos y garantiza que todo funcione de la misma manera en diferentes computadoras. Ahora puede concentrarse en codificar en lugar de luchar contra conflictos de software.
recurso:
Lectura relacionada: