Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

767
Vistas
Cómo usar un entorno virtual de python copiado en un contenedor docker

Tengo un paquete de python que instalé y modifiqué según mis necesidades almacenado en una carpeta venv. Pensé usando:

 RUN source venv/bin/activate

en mi Dockerfile (después de copiarlo en el contenedor, por supuesto) resolvería mis problemas, pero los comentarios a esta respuesta revelaron que no es así. Luego, me encontré con este artículo que muestra cómo configurar un nuevo venv dentro de un contenedor acoplable, pero no responde a mi pregunta. Muchas otras respuestas me enviaron a una persecución salvaje interminable, así que decidí preguntar aquí. Con suerte, una buena respuesta resolverá mi problema y servirá a aquellos que enfrentarán este problema en el futuro para paquetes de python personalizados en contenedores docker.

Mi pregunta:
¿Cómo usar un venv copiado en un contenedor docker?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

En general, no puede copiar entornos virtuales en ningún lugar, Docker u otros. Tienden a estar vinculados a una ruta de sistema de archivos muy específica y a una instalación de Python bastante específica. Si supiera que tiene exactamente el mismo binario de Python y lo copió exactamente en la misma ruta del sistema de archivos, probablemente podría COPIARLO tal como está, pero el sistema de compilación sería extremadamente frágil.

También se da el caso de que, por lo general, no necesita entornos virtuales en Docker. Una imagen de Docker proporciona el mismo tipo de instalación aislada de Python para la que usaría un entorno virtual en un contexto que no sea de Docker. Si normalmente configura un entorno virtual ejecutando

 python3 -m venv vpy . vpy/bin/activate pip install -r requirements.txt

entonces puede obtener una instalación equivalente con un Dockerfile como

 FROM python:3 WORKDIR /app COPY requirements.txt . RUN pip install -r requirements.txt

En los comentarios, insinúa la modificación manual de los paquetes instalados. Esto no suele ser una buena práctica (¿qué pasa si hay una actualización de seguridad crítica en un paquete que ha cambiado? ¿qué pasa si su colega necesita trabajar en su proyecto pero no en su computadora?). Puede usar una herramienta como diff (1) para crear un archivo de parche que describa lo que ha cambiado, comparando su archivo modificado con el original. Si tienes eso, entonces puedes hacer algo como

 COPY local.patch /app/ RUN cd $(python3 -c 'import sysconfig; print(sysconfig.get_path("platlib"))') \ && patch -p0 < /app/local.patch

Es importante tener en cuenta que cada comando EJECUTAR inicia un nuevo shell en un nuevo contenedor. Entonces, el comando cd en este último ejemplo solo afecta este comando RUN y nada después. En el comando RUN source ... propuesto, las variables de entorno establecidas por esto se perderán al final de ese comando EJECUTAR. (También tenga en cuenta que source no es un comando de shell estándar y no funcionará, por ejemplo, en imágenes basadas en Alpine, pero . es equivalente y es estándar).

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda