uwsgi + Flask + virtualenv ImportError: no module named site uwsgi + Flask + virtualenv ImportError: no module named site flask flask

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