Once the LAMP stack is installed it will be nice to use some of the features in Python, like Seaborn charts. Python is not configured by default in Apache like PHP so apache needs to be configured to run Python scripts as an external executable. This type of configuration is called CGI (Common Gateway Interface) and was how PERL and other languages were included on web pages before embedded languages like PHP were created.
We will assume Python is already installed. If not, get Python from http://python.org/download/ and follow the instructions.
Configure Apache to Run Python CGI
Edit the Apache configuration file
cd /etc/httpd/conf/ vi httpd.conf
- Search for “Options Indexes FollowSymLinks” and add “ExecCGI” to this line.
- Search for “#AddHandler cgi-script .cgi” and add “.py” to this line.
Commands in vi:
- Search: / enter term and enter
- Edit: a (append) or i (insert) allows modification of the current line
- Write file and Quit: Escape (to get out of edit mode) : (colon) “wq” Enter
Restart Apache
cd /etc/init.d sudo httpd -k restart
Configure Apache to run Python CGI
Edit the httpd.conf apache configuration file located in
cd /etc/httpd/conf/ vi httpd.conf
Search for “Options Indexes FollowSymLinks” and add “ExecCGI” to this line.
Search for “#AddHandler cgi-script .cgi” and add “.py” to this line.
Commands in vi:
- Search: / enter term and enter
- Edit: a (append) or i (insert) allows modification of the current line
- Write file and Quit: Escape (to get out of edit mode) : (colon) “wq” Enter
Restart Apache
cd /etc/init.d sudo httpd -k restart
Run a Test Python Page
The critical part of the script is the first line which tells the web server what executable to run the script with. Create a file with the .py extension (test.py) on the website. Note the two blank lines after Content-type. Print commands should also have parenthesis though the script may work on other installations without them.
#!/usr/bin/python3
print("Content-type: text/html")
print()
print()
print("<html><head>")
print ("</head><body>All y'all base are belong to us</body></html>")
Loading the page in a web browser should render only the message. Error 500 or the raw file loaded onto the page means the Apache configuration is wrong (or there is an error in the Python script).