es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué no puede encontrar virtualenv de Python 3 algunos paquetes instalados?

Estoy trabajando con un entorno virtual de Python llamado env para ejecutar Odoo. En el directorio bin del entorno virtual tengo lo siguiente:

pip
pip3
pip3.8

python -> /usr/bin/python3
python3 -> python
python3.8 -> python

Y el servicio de Odoo está ejecutando este comando para ejecutar Odoo (como se puede ver, utilizando el python3.8 del entorno virtual):

ExecStart=/opt/odoo/env/bin/python3.8 /opt/odoo/odoo_13/src/oca/OCB/odoo-bin -c /opt/odoo/odoo_13/config/.odoo.conf

El problema es que de vez en cuando, Odoo da el siguiente error crítico y la instancia deja de funcionar:

ModuleNotFoundError: No module named 'werkzeug'

Parece que el paquete werkzeug no está instalado, pero si hago lo siguiente:

anubia@my-server:/opt/odoo$ . env/bin/activate

(env) anubia@my-server:/opt/odoo$ which pip
/opt/odoo/env/bin/pip

(env) anubia@my-server:/opt/odoo$ which pip3
/opt/odoo/env/bin/pip3

(env) anubia@my-server:/opt/odoo$ which pip3.8
/opt/odoo/env/bin/pip3.8

(env) anubia@my-server:/opt/odoo$ pip3.8 install werkzeug
Requirement already satisfied: werkzeug in ./env/lib/python3.8/site-packages (0.11.15)

(env) anubia@my-server:/opt/odoo$ cd env/lib/python3.8/site-packages/

Así que werkzeug parece estar instalado. ¿Cuál es el problema?

EDITAR

Después de intentar con la respuesta de @ChesuCR durante dos semanas, el servidor de Odoo dejó de funcionar nuevamente. Esta vez el error es:

ModuleNotFoundError: No module named 'PyPDF2'

Sin embargo, si compruebo el virtualenv:

myuser@myserver:/opt/odoo$ . venv3.7/bin/activate
(venv3.7) myuser@myserver:/opt/odoo$ which python3.7
/opt/odoo/venv3.7/bin/python3.7
(venv3.7) myuser@myserver:/opt/odoo$ python3.7 -m pip install PyPDF2
Requirement already satisfied: PyPDF2 in ./venv3.7/lib/python3.7/site-packages (1.26.0)
(venv3.7) myuser@myserver:/opt/odoo$ python3.7 -m pip list
Package           Version

----------------- ----------------------------------------
appdirs           1.4.4
attrs             21.2.0
Babel             2.6.0
beautifulsoup4    4.10.0
cached-property   1.5.2
certifi           2021.10.8
cffi              1.15.0
chardet           3.0.4
cryptography      36.0.0
decorator         4.3.0
defusedxml        0.7.1
docutils          0.14
ebaysdk           2.1.5
gevent            1.5.0
greenlet          0.4.15
html2text         2018.1.9
idna              2.8
isodate           0.6.0
Jinja2            2.10.1
libsass           0.17.0
lxml              4.3.2
Mako              1.0.7
MarkupSafe        1.1.0
mock              2.0.0
num2words         0.5.6
ofxparse          0.19
passlib           1.7.1
pbr               5.8.0
Pillow            6.1.0
pip               21.3.1
polib             1.1.0
psutil            5.6.6
psycopg2          2.7.7
pyasn1            0.4.8
pyasn1-modules    0.2.8
pycparser         2.21
pydot             1.4.1
pyOpenSSL         21.0.0
pyparsing         2.2.0
PyPDF2            1.26.0
pyserial          3.4
python-dateutil   2.7.3
python-stdnum     1.17
pytz              2019.1
pyusb             1.0.2
qrcode            6.1
reportlab         3.5.13
requests          2.21.0
requests-toolbelt 0.9.1
setuptools        57.5.0
six               1.16.0
soupsieve         2.3.1
urllib3           1.24.3
vatnumber         1.2
vobject           0.9.6.1
Werkzeug          0.14.1
wheel             0.37.0
xlrd              1.1.0
XlsxWriter        1.1.2
xlwt              1.3.0
zeep              3.2.0

Y, por supuesto, Odoo se está ejecutando con el intérprete de Python del virtualenv:

ExecStart=/opt/odoo/venv3.7/bin/python3.7 /opt/odoo/odoo_13/src/oca/OCB/odoo-bin -c /opt/odoo/odoo_13/config/.odoo.conf
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El problema parece ser que aunque werkzeug está instalado en el virtualenv, no se está cargando correctamente en Odoo. Una solución a esto es intentar agregar el directorio site-packages del virtualenv directamente a la variable de entorno PYTHONPATH del servicio de Odoo antes de ejecutarlo.

    Para hacer esto, modifique la línea ExecStart en el archivo de unidad systemd del servicio de Odoo para agregar PYTHONPATH antes del comando:

    ExecStart=/bin/bash -c "export PYTHONPATH=/opt/odoo/env/lib/python3.8/site-packages && /opt/odoo/env/bin/python3.8 /opt/odoo/odoo_13/src/oca/OCB/odoo-bin -c /opt/odoo/odoo_13/config/.odoo.conf"
    

    Luego, recargue el demonio systemd y reinicie el servicio de Odoo:

    sudo systemctl daemon-reload
    sudo systemctl restart odoo.service
    

    Esto debería asegurar que el directorio site-packages del virtualenv esté disponible para el servicio de Odoo, lo que le permitirá cargar correctamente los paquetes instalados como werkzeug.

    Nota: si encuentra otros errores de módulos faltantes como PyPDF2, la misma solución de agregar PYTHONPATH a la línea ExecStart debería funcionar, siempre que el módulo faltante esté instalado en el virtualenv.

Comments are closed.