uwsgi + Flask + virtualenv ImportError: no module named site
I had the similar issue before. My problem is that I have both python2.x and python3.x on my ubuntu system, and I want my project to run in a virtual env in which python3 environment is installed. How I resolved this issue:
apt-get install python3-pip
pip3 install uWSGI
That's all.
See the answer from @JRajan first.
If you're sure you just want to suppress the error and not actually solve the underlying issue, you should add --no-site
to your command or no-site=true
to your uwsgi.ini file.
The path to your virtual environment is wrong. That's the reason for this error.
I'm using virtualenvwrapper and my virtual environments are set at ~/.virtualenvs. So in my case, the uwsgi call would look something like
sudo uwsgi -s /tmp/uwsgi.sock -w myapp:app -H ~/.virtualenvs/myapp
Hope this helps next time someone comes looking for this one.
Thanks to Cody for pointing it out in the comments.
In my case the problem was the python version uWSGI tried to use.
My project was written in python 3.4, but I was not specifying this in uWSGI config. So uWSGI tried to use python 2 and tried to import modules from the folder lib/python2.7 inside the virtualenv.
So I received the 'No module named site' error, because all the modules, including the site module, where inside lib/python3.4, not lib/python2.7.
To solve it, i had to do two things:
Install the python3 plugin for uWSGI, with:
apt-get install uwsgi-plugin-python3
Use it in the .ini config file, with:
plugins = python34
Hope this helps someone with the same problem in the future.
As requested, here follows my .ini file:
[uwsgi]
base = /your/app/path
pythonpath = %(base)
module = your_module_name
callable = app #Here you put the name of the variable which holds your app inside your module
home = /your/virtualenv/path
plugins = python34
master = true
processes = 2
uid = www-data
gid = www-data
socket = /path/to/socket
chmod-socket = 660
die-on-term = true
logto = /var/log/uwsgi/%n.log