Python3.4+uWSGI for Django Website in VirtualEnv (CentOS)

Install Python 3.x

In CentOS, There is no Python3 rpm package in EPEL, RPMFusion, we must install Python 3.x by source. Download Python 3.4.0, and extract it.

tar -xvf Python-3.4.0.tar.xz
cd Python-3.4.0

switch to Python-3.4.0, compile&install Python 3.4.0 (You are expected have installed gcc, make and sqlite-devel)

make install

As the result, you can see the path of Python 3.4.0 by command which python3.4 Thanks to Python 3.4.0, we needn’t install PIP.

Install virtualenvwrapper&Django

You can install virtualenvwrapper by PIP.(Require root privileges) pip install virtualenvwrapper Don’t forget add two lines to file .bashrc:

source /usr/local/bin/

Let it take effect:

source ~/.bashrc

Then, create a New VirtualEnv, and install Django:

mkvirtualenv django_test
pip install django

Let’s create a new Website for test (in virtualenv django_test): startproject proj
cd proj
python runserver

Visit port 8000, you can see the welcome page.

Install uWSGI

Download it and extract it:

tar -xvf uwsgi-2.0.3.tar.gz
cd uwsgi-2.0.3

Compile it ( before compile, make sure you are in virtualenv django_test with Python 3.4.0 ):

python –build

Test it (with Django Website proj):

/path/to/uwsgi/uwsgi –http :8000 –chdir /path/to/proj –wsgi-file proj/ -H $HOME/.virtualenvs/django_test

Then visit the port 8000, the uWSGI is also worked! Let’s prepare uWSGI for nginx! move uwsgi to system path (I cannot find a better way to install uWSGI):

mv /path/to/uwsgi/ /usr/local
#that is, you have folder /usr/local/uwsgi-2.0.3

and create the Directory /usr/etc/uwsgi and the file /usr/etc/uwsgi/django.ini:

mkdir -p /usr/local/etc/uwsgi
cat > /usr/local/etc/uwsgi/django.ini << EOF
socket = /tmp/django.sock
pidfile = /tmp/
chmod-socket = 666
limit-as = 256
processes = 6
max-request = 2000
memory-report = true
enable-threads = true


chdir = /path/to/proj


execute uWSGI:

/usr/local/uwsgi-2.0.3/uwsgi /usr/local/etc/uwsgi/django.ini

Install Nginx

You can install nginx by yum (Require EPEL):

yum install nginx -y

Then, edit /etc/nginx/conf.d/virtual.conf :

server {
listen 80;
server_name _;

location / {
    include     uwsgi\_params;
    uwsgi\_pass  unix:///tmp/django.sock;


And start nginx:

service nginx start

Then, visit the port 80, you can see the welcome page of Django.

Python3.4+uWSGI for Django Website in VirtualEnv (CentOS)


Robert Lu