Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

uwsgi + Flask + virtualenv ImportError: no module named site

(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.

like image 594
101010 Avatar asked Jun 30 '13 14:06

101010


5 Answers

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.

like image 174
JRajan Avatar answered Nov 15 '22 10:11

JRajan


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.

like image 26
hughes Avatar answered Nov 15 '22 12:11

hughes


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
like image 15
luislhl Avatar answered Nov 15 '22 10:11

luislhl


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.

like image 8
kofwang Avatar answered Nov 15 '22 11:11

kofwang


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
like image 4
Abu Obaida Avatar answered Nov 15 '22 12:11

Abu Obaida