≡ Menu

Debian / Ubuntu Linux Apache mod_python Configuration

I‘ve installed a Web server (Apache2) and like to use Python interpreter correctly. How do I configure mod_python under Debian or Ubuntu Linux running Apache server version 2.x?

You need to install the following software:

a] libapache2-mod-python : Mod_python is a module that embeds the Python language interpreter within the server, allowing Apache handlers to be written in Python. Mod_python brings together the versatility of Python and the power of the Apache Web server for a considerable boost in flexibility and performance over the traditional CGI approach.

b] Apache2 webserver.

Install mod_python

Open terminal and type the following command:
$ sudo apt-get update
$ sudo apt-get install libapache2-mod-python libapache2-mod-python-doc

Configure mod_python

You need to create directory to host your python scripts. Type the following command:
$ sudo mkdir /var/www/py
Give your account permission to access the scripts:
$ sudo chown yourname:www-data /var/www/py
Now, open /etc/apache2/sites-available/default, enter:
$ sudo -s
# vi /etc/apache2/sites-available/default

Add the following config code:

   <Directory /var/www/py>
        AddHandler mod_python .py
        PythonHandler hello
        PythonDebug On
    </Directory>

Save and close the file. Restart Apache2 server:
# /etc/init.d/apache2 restart
# tail -f /var/log/apache2/error.log

You should see mod_python/3.3.1 Python/2.5.2 loaded:

[Tue Mar 17 02:42:18 2009] [notice] FastCGI: process manager initialized (pid 15572)
[Tue Mar 17 02:42:18 2009] [notice] mod_python: Creating 8 session mutexes based on 150 max processes and 0 max threads.
[Tue Mar 17 02:42:18 2009] [notice] mod_python: using mutex_directory /tmp 
[Tue Mar 17 02:42:18 2009] [notice] Apache/2.2.9 (Ubuntu) mod_fastcgi/2.4.6 PHP/5.2.6-2ubuntu4.1 with Suhosin-Patch mod_python/3.3.1 Python/2.5.2 mod_perl/2.0.4 Perl/v5.10.0 configured -- resuming normal operations

How do I test mod_python?

Simply create the script as follows:
$ vi /var/www/py/hello.py
The following simple mod_python program serves as a good test:

from mod_python import apache
 
def handler(req):
        req.log_error('handler')
        req.content_type = 'text/html'
        req.send_http_header()
        req.write('<html><head><title>Testing mod_python</title></head><body>')
        req.write('Hello World!')
        req.write('</body></html>')
        return apache.OK

Save and close the file. Now fire a webbrowser and type the url:
http://localhost/py/hello.py
You hould see “Hello World!” on screen.

Further readings:

This is just getting started tutorial and setting up the Python interpreter correctly. I recommend getting mod_python book or refer to Python Language Website.

Share this tutorial on:

Your support makes a big difference:
I have a small favor to ask. More people are reading the nixCraft. Many of you block advertising which is your right, and advertising revenues are not sufficient to cover my operating costs. So you can see why I need to ask for your help. The nixCraft, takes a lot of my time and hard work to produce. If you use nixCraft, who likes it, helps me with donations:
Become a Supporter →    Make a contribution via Paypal/Bitcoin →   

Don't Miss Any Linux and Unix Tips

Get nixCraft in your inbox. It's free:



{ 11 comments… add one }
  • Ronny Pfannschmidt March 18, 2009, 5:21 pm

    the biggest misstake of all is to use mod_python for anything new – mod_wsgi is there, use it, its the standard

  • Bruno February 4, 2010, 7:44 pm

    Hello friend, congratulations for the article, was excellent, I was killing me to install mod_python and you explained in a clear and objective.

    grateful!

  • Larry Delaney February 23, 2011, 6:16 pm

    I followed your installation procedures carefully. However, when I ask for the hello.py from a browser I get the download menu asking me if I want to save or execute the file rather than getting a web page. How can I fix this? Any suggestions?

    During installation the error.log was OK. The chown worked OK also.

    • Larry Delaney February 23, 2011, 6:21 pm

      Sorry, false alarm, I was able to figure this out myself. Just another stupid mistake. Thanks anyway.

      • vincent January 17, 2014, 8:45 am

        I have the same problem, my browser ask me if I want download or open the file. How could you fix the problem ?? Thanks

  • Marcelo Martinovic May 16, 2011, 11:32 pm

    Excelent, very easy !!!!! Thanks from Argentina !!!

  • Önder Kalacı May 21, 2011, 6:33 am

    It’s great, thank you very much

  • bellszhu August 18, 2011, 3:22 pm

    i have question!!
    Syntax error on line 44 of /etc/apache2/sites-enabled/000-default:
    Invalid command ‘PythonHandler’, perhaps misspelled or defined by a module not included in the server configuration
    Action ‘configtest’ failed.
    The Apache error log may have more information.
    …fail!

  • pc-moon September 17, 2011, 12:03 am

    its great thank u so much

    hope god bless u

  • serina November 4, 2011, 2:45 am

    greate,thanks so much

  • Maui1983 August 7, 2012, 12:13 pm

    thanks!!!!!

Security: Are you a robot or human?

Leave a Comment

You can use these HTML tags and attributes: <strong> <em> <pre> <code> <a href="" title="">


   Tagged with: , , , , , , , , ,