Ativar ambiente virtual para toda a execução do IRIS
Olá a todos.
Após tentar executar métodos Python no Docker intersystemsdc/irishealth-community, que agora não permite executar nenhum método com Python, decidi deixar essa versão e começar a trabalhar com o [containers.intersystems.com/intersystems/iris-community](https://containers.intersystems.com/intersystems/iris-community).
Neste ambiente os métodos Python funcionam, o que já foi um passo bem grande. Estou tentando importar minhas bibliotecas com pip install -r requirements.txt mas, como uma excelente medida de segurança, o sistema impede que essa alteração seja feita na biblioteca geral, exigindo que a instalação seja realizada em um ambiente virtual.
Tenho o seguinte código no 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
Se eu acesso depois pelo terminal, vejo que os pacotes foram realmente instalados no ambiente virtual, mas se quero utilizá-los em uma classe do IRIS, ele não consegue acessar porque a aplicação não está com o ambiente virtual ativo.
Consultei vários fóruns e não ficou muito claro para mim como configurar minha instância do IRIS para que ela tenha acesso aos pacotes instalados no ambiente virtual.
No arquivo docker-compose.yml, tenho este valor na seção environment:
environment:
- IRIS_PYTHON_PATH=/usr/irissys/.venv/bin/
Comments
Boa tarde, Vitor!
O Embedded Python por padrão procura as libraries em /caminho/do/seu/iris/mgr/python
E você pode especificar o caminho de instalação (acredito que o próprio /.venv do python pode estar la)
pip install -r requirements.txt -t /caminho/do/seu/iris/mgr/python
se assim não funciona, no seu código você pode definir onde código procura imports com
set sys = ##class(%SYS.Python).Import("sys")
do sys.path.append("/caminho/do/seu/venv/lib/pythonX.X/site-packages") set requests = ##class(%SYS.Python).Import("requests")
.
Deixe-me saber se isso ajuda