uwsgi + Flask + virtualenv ImportError: no module named site
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.
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.
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/pathpythonpath = %(base)module = your_module_namecallable = app #Here you put the name of the variable which holds your app inside your modulehome = /your/virtualenv/pathplugins = python34master = trueprocesses = 2uid = www-datagid = www-datasocket = /path/to/socketchmod-socket = 660die-on-term = truelogto = /var/log/uwsgi/%n.log