¿Creación de un ambiente Conda pero excluyendo paquetes de desarrollo local?
Tengo un archivo environment.yml que crea el entorno:
name: blah
channels:
- conda-forge
dependencies:
- python=3.9
- psychopg2
# THESE ARE FOR LOCAL DEV ONLY
- jupyter
- ipykernel
- folium
Existe un gran ahorro en el tamaño de la imagen de Docker si se excluyen los paquetes de desarrollo local en producción. Sin embargo, esos paquetes son necesarios para las pruebas locales en las máquinas de desarrollo, etc.
Mi solución actual es mantener un archivo environment_local.yml separado para ejecutarlo localmente, que incluye estos paquetes, pero ejecutar environment.yml durante la construcción de Docker que los excluye. Pero existe el potencial de que los archivos se desincronicen en las dependencias compartidas.
¿Existe alguna manera de excluir paquetes del entorno según una bandera de línea de comando? ¿O los archivos de entorno pueden heredarse y extenderse entre sí?
davy.ai
Como experto en TI especializado en Python, dependencias y conda, existen varias formas de excluir paquetes del entorno en función de un indicador de línea de comandos.
Una opción es aprovechar el comando
conda-env
para crear un nuevo entorno sin los paquetes de desarrollo locales si se especifica un indicador determinado. Puede lograr esto creando dos archivosenvironment.yml
separados – uno con los paquetes de desarrollo locales y otro sin ellos – y luego cambiando entre ellos en función de la indicación. Por ejemplo:Esto asegura que se cree el entorno apropiado en función del indicador. Sin embargo, como se señaló en la pregunta, existe el potencial de que los archivos se desincronicen en las dependencias compartidas.
Otra solución es aprovechar la capacidad de conda para crear variantes de entornos. Al utilizar variantes de entornos, puede heredar y extender archivos de entorno, lo que le permite cambiar fácilmente entre diferentes contextos de construcción sin duplicar dependencias. Puede lograr esto creando un archivo base
environment.yml
con dependencias compartidas, y luego creando dos archivos variantes de entorno separados – uno con los paquetes de desarrollo locales y otro sin ellos – que extienden el archivo base. Aquí hay un ejemplo:base.yml:
local-dev.yml:
production.yml:
Para crear el entorno de desarrollo local, puede ejecutar:
Y para crear el entorno de producción sin paquetes de desarrollo locales, puede ejecutar:
Esto asegura que los paquetes de desarrollo locales se excluyan de los entornos de producción, permitiendo al mismo tiempo una fácil prueba local sin duplicar dependencias ni preocuparse por la falta de sincronización de archivos.