Escrito por

Project Manager & Head of Interoperability at Salutic Soluciones, S.L.
MOD
Pregunta Kurro Lopez · 23 mayo

Activar entorno virtual para toda la ejecución de IRIS

Hola a todos.

Tras intentar de ejecutar métodos Python en el docker intersystemsdc/irishealth-community, que no permite ahora ejecutar ningún método con Python, decidí dejar esta versión y empezar a trabajar con containers.intersystems.com/intersystems/iris-community.

En este entorno si funcionan los método de Python y ya era un paso bastante grande.

Intento importar mis liberarías con pip install -r requirements.txt pero, como muy buena medida de seguridad, me impide que se realice este cambio en la librería general, por lo que requiere que esta instalación se realice en un entorno virtual.

Tengo el siguiente código en Dockerfile

ARG IMAGE=containers.intersystems.com/intersystems/iris-community:latest-em 
FROM $IMAGE 
USER root 
WORKDIR /opt/irisbuild 
RUN chown ${ISC_PACKAGE_MGRUSER}:${ISC_PACKAGE_IRISGROUP} /opt/irisbuild 

USER ${ISC_PACKAGE_MGRUSER} 

COPY src src 
COPY data data 
COPY iris.script iris.script 
COPY requirements.txt requirements.txt 
RUN python3 -m venv ${ISC_PACKAGE_INSTALLDIR}/.venv 
RUN bash -c "source \"${ISC_PACKAGE_INSTALLDIR}/.venv/bin/activate\" && pip install -U -r requirements.txt" 
RUN export IRIS_PYTHON_PATH=${ISC_PACKAGE_INSTALLDIR}/.venv/bin/ 

RUN iris start IRIS \ 
    && iris session IRIS < iris.script \ 
    && iris stop IRIS quietly 
    

Si accedo luego por terminal, veo que realmente se han instalado los paquetes en el entorno virtual, pero si quiero utilizarlo en una clase de IRIS, no puede acceder porque la aplicación no tiene levantado el entorno virtual.

He consultado en varios foros y no me deja muy claro como hay que configurar mi instancia de IRIS para que tenga acceso a los paquetes instalados en el entorno virtual.

En el fichero docker-compose.yml tengo este valor en la sección environment

    environment:
      - IRIS_PYTHON_PATH=/usr/irissys/.venv/bin/
Pero no funciona, al intentar hacer el import de algún paquete instalado en este entorno, no lo encuentra.
¿Alguna sugerencia?
Muchas gracias por adelantado.
Versión del producto: IRIS 2026.1
$ZV: IRIS for UNIX (Ubuntu Server LTS for x86-64 Containers) 2026.1 (Build 234U) Fri Mar 27 2026 14:07:14

Comments

DC AI Bot · 25 mayo Bot

IRIS no “activa” automáticamente un entorno virtual de Python para Embedded Python. En el material recuperado se describen dos formas compatibles de trabajar con paquetes:

  1. instalar los paquetes directamente en la carpeta mgr/python de IRIS usando pip --target, o
  2. usar un entorno virtual y añadir explícitamente su directorio site-packages a sys.path antes de importar módulos. [1]

Para el caso de un entorno virtual, lo que se muestra es añadir la ruta de site-packages, no la carpeta bin. El ejemplo recuperado es este: [1]

set sys = ##class(%SYS.Python).Import("sys")
do sys.path.append("/where/you/want/your/venv/lib/pythonX.X/site-packages")
set requests = ##class(%SYS.Python).Import("requests")

[1]

Por eso, definir IRIS_PYTHON_PATH=/usr/irissys/.venv/bin/ en docker-compose.yml no aparece en el material recuperado como mecanismo para que Embedded Python encuentre paquetes del entorno virtual. Lo que sí aparece es añadir a sys.path el directorio site-packages del venv, no bin. [1]

Si quieres que los paquetes estén disponibles sin gestionar manualmente la ruta del entorno virtual, el material recuperado sugiere instalarlos directamente en la ubicación de módulos Python de IRIS usando pip --target=/path/to/your/iris/mgr/python .... [1]

También se recupera una referencia a un artículo con más detalles sobre entornos virtuales y a una librería para ayudar a configurar un único venv para IRIS, pero en el contenido recuperado no se aportan más detalles técnicos que permitan confirmar una configuración global basada en IRIS_PYTHON_PATH. [1]

En resumen, la sugerencia sustentada por el material es:

  • no apuntar a .venv/bin/, sino al site-packages del entorno virtual en tiempo de ejecución con sys.path.append(...); o
  • instalar las dependencias directamente en mgr/python con pip --target. [1]


Sources:

Cuéntanos más:
No me gusta el estilo
No es factualmente correcto
No seguí completamente las instrucciones
Rechazado cuando no debía
Ser perezoso
Más...
Enviar
0 0

¡Buenas @Kurro Lopez ! Por mi experiencia con la versión Community, no es necesario definir los entornos virtuales de Python, si quieres, echa un vistazo a este ejemplo que está trabajando con InterSystems IRIS Community:

https://github.com/intersystems-ib/inquisidor/blob/main/iris/Dockerfile

Básicamente es esto:

RUN apt-get update && apt-get install -y python3 && apt-get -y install curl

# install required packages
COPY --chown=$ISC_PACKAGE_MGRUSER:$ISC_PACKAGE_IRISGROUP /requirements.txt /
RUN chmod 777 /requirements.txt

RUN pip3 install -r /requirements.txt --break-system-packages

Como ves, instalamos previamente python3 y a continuación ejecutamos un pip3. Si miras el docker-compose de dicho proyecto no estamos configurando ningún entorno virtual. Prueba a adaptar tu código como el de este proyecto y nos comentas.

0