简体   繁体   中英

Why can't Python 3 virtualenv find some installed packages?

I am working with a Python virtualenv named env to execute Odoo. In the virtualenv bin directory, I got this:

pip
pip3
pip3.8

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

And the Odoo service is running this command to execute Odoo (as you can see, using the python3.8 of the virtualenv):

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

The problem is that every now and again, Odoo gives the following critical error and the instance stops working:

ModuleNotFoundError: No module named 'werkzeug'

It seems that the werkzeug package is not installed, but, if I do the following:

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/
Display all 125 possibilities? (y or n)
Babel-2.9.1.dist-info/             attrs-21.2.0.dist-info/            docutils/                          numpy-1.21.0.dist-info/            python_stdnum-1.16.dist-info/      urllib3-1.26.6.dist-info/
Crypto/                            babel/                             docutils-0.17.1.dist-info/         numpy.libs/                        pytz/                              validate_email-1.3.dist-info/
Jinja2-3.0.1.dist-info/            bcrypt/                            gevent/                            paramiko/                          pytz-2021.1.dist-info/             vatnumber/
MarkupSafe-2.0.1.dist-info/        bcrypt-3.2.0.dist-info/            gevent-21.1.2.dist-info/           paramiko-2.7.2.dist-info/          reportlab/                         vatnumber-1.2.dist-info/
OpenSSL/                           cached_property-1.5.2.dist-info/   greenlet/                          passlib/                           reportlab-3.5.68.dist-info/        werkzeug/
PIL/                               cachetools/                        greenlet-1.1.0.dist-info/          passlib-1.7.4.dist-info/           reportlab.libs/                    wheel/
Pillow-8.3.1.dist-info/            cachetools-4.2.2.dist-info/        html2text/                         phonenumbers/                      requests/                          wheel-0.36.2.dist-info/
Pillow.libs/                       certifi/                           html2text-2020.1.16.dist-info/     phonenumbers-8.12.27.dist-info/    requests-2.25.1.dist-info/         xlrd/
PyNaCl-1.4.0.dist-info/            certifi-2021.5.30.dist-info/       idna/                              pip/                               requests_file-1.5.1.dist-info/     xlrd-2.0.1.dist-info/
PyPDF2/                            cffi/                              idna-2.10.dist-info/               pip-21.3.1.dist-info/              requests_toolbelt/                 xlsxwriter/
PyPDF2-1.26.0.dist-info/           cffi-1.14.5.dist-info/             isodate/                           pkg_resources/                     requests_toolbelt-0.9.1.dist-info/ xlwt/
PyYAML-3.12.dist-info/             cffi.libs/                         isodate-0.6.0.dist-info/           polib-1.1.1.dist-info/             sassutils/                         xlwt-1.3.0.dist-info/
Unidecode-1.2.0.dist-info/         chardet/                           jinja2/                            psutil/                            setuptools/                        xmlsig/
Werkzeug-0.11.15.dist-info/        chardet-4.0.0.dist-info/           libsass-0.21.0.dist-info/          psutil-5.8.0.dist-info/            setuptools-57.1.0.dist-info/       xmlsig-0.1.5.dist-info/
XlsxWriter-1.4.4.dist-info/        cryptography/                      lxml/                              psycopg2/                          six-1.16.0.dist-info/              yaml/
__pycache__/                       cryptography-3.4.7.dist-info/      lxml-4.6.3.dist-info/              psycopg2-2.9.1.dist-info/          stdnum/                            zeep/
_distutils_hack/                   dateutil/                          markupsafe/                        pyOpenSSL-20.0.1.dist-info/        suds/                              zeep-4.0.0.dist-info/
appdirs-1.4.4.dist-info/           decorator-5.0.9.dist-info/         nacl/                              pycparser/                         suds_jurko-0.6.dist-info/          zope/
asn1crypto/                        defusedxml/                        num2words/                         pycparser-2.20.dist-info/          tests/                             zope.event-4.5.0.dist-info/
asn1crypto-1.4.0.dist-info/        defusedxml-0.7.1.dist-info/        num2words-0.5.10.dist-info/        pycryptodome-3.10.1.dist-info/     unidecode/                         zope.interface-5.4.0.dist-info/
attr/                              docopt-0.6.2.dist-info/            numpy/                             python_dateutil-2.8.1.dist-info/   urllib3/

So werkzeug seems to be installed. What is the problem?

EDIT

After trying with @ChesuCR answer two weeks, the Odoo server stopped working again. This time the error is:

ModuleNotFoundError: No module named 'PyPDF2'

However, if I check the 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

And of course Odoo is running with the Python interpreter of the 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

Odoo 13 is not compatible with the Python 3.8 version . You can try with Python 3.7 or 3.6 versions.

Anyway, many issues have been fixed, so I am not sure about the Python 3.8 incompatibility

If the problem still bothers you, try to install the exact versions that Odoo developers posted in the requirements.txt file, where dependencies should have been tested. So you can install the right Werzeug version:

pip install Werkzeug==0.14.1

Ah, and if you want to show all the installed packages you can do:

pip list

I don't know what Odoo is, but in order to find the packages, you usually need to "activate" the virtualenv. Just like you did manually, but you also need that when Odoo is running the program. It is not enough to just call the correct python binary. So you can either try to have Odoo activate the venv before it starts the program, or if not possible, emulate doing that (it's probably mostly setting PATH and PYTHONPATH environment variables)

May be you should try this: How to Install Odoo 13 on Ubuntu 18.04

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM