(Other posts on SO are similar, but none have the specific combination of uwsgi + Flask + virtualenv) (This one is closest)
I installed uwsgi via apt-get. I also tried pip install wsgi. Both gave me the same issue.
Test command:
sudo uwsgi -s /tmp/uwsgi.sock -w myapp:app -H myvirtualenv
Result:
Python version: 2.7.4 (default, Apr 19, 2013, 18:35:44) [GCC 4.7.3]
Set PythonHome to myvirtualenv
ImportError: No module named site
I can otherwise run my app in the virtual env.
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/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
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.
If your virtual environment is running on Python3 then you must install uwsgi using pip3, not pip otherwise, version mismatch will create this import problem
pip uninstall uwsgi
pip3 install uwsgi
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With