ubuntu12.04进行python cgi开发

2024-06-23 16:08

本文主要是介绍ubuntu12.04进行python cgi开发,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

0.需求原因

想在我的Linux上架设Apache来运行CGI程序,方便以后用Apache部署Python的Web应用,但遇到各种各样的问题,网上找的答案要么都太旧了(4/5年前跟现在已经差很多了),要么就不完整,所以这里总结一下,作为最新版本吧。

1.Apache安装

采用的是源码编译安装的形式。首先要说明的是,要成功安装Apache,需要依次安装完下面的软件(函数库)才算是成功地安装了Apache:

(1)apr安装

下载地址: http://apr.apache.org/

注意这个网站上有两个相应的软件下载,一个是apr,另外一个是下面将要安装的apr-util,由于英文名字看起来太容易混淆,所以一定要看清楚下载的是哪个。这里我下载的是: apr-1.5.2.tar.gz

第一步:解包

xpleaf@leaf:~/下载$ tar xvf apr-1.5.2.tar.gz ...... apr-1.5.2/mmap/win32/ apr-1.5.2/mmap/win32/mmap.c apr-1.5.2/apr-config.in

第二步:运行configure检测和设置编译选项

xpleaf@leaf:~/下载/apr-1.5.2$ ./configure 
......
config.status: creating include/arch/unix/apr_private.h
config.status: executing libtool commands
rm: cannot remove 'libtoolT': No such file or directory config.status: executing default commands

正常情况下是没有问题的,如果出现问题,可以自行查找,这个好解决。

第三步:编译和安装

xpleaf@leaf:~/下载/apr-1.5.2$ make ...... xpleaf@leaf:~/下载/apr-1.5.2$ sudo make install ......

OK,这样的话,apr就安装完成了。

(2)apr-util安装

下载地址跟上面的是一样的,这里我下载的版本是: apr-util-1.5.4.tar.gz

apr-util安装的步骤跟上面的差不多,不过有一步要注意的, 就是在执行./configure命令的时候需要指定apr的安装目录 :

xpleaf@leaf:~/下载/apr-util-1.5.4$ ./configure
......
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
Applying apr-util hints file rules for x86_64-unknown-linux-gnu
checking for APR... no
configure: error: APR could not be located. Please use the --with-apr option. #注意看上面的报错提示

先找到apr的安装目录:

xpleaf@leaf:~/下载/apr-util-1.5.4$ whereis apr apr: /usr/local/apr

再添加相应参数执行apr-util的./configure命令:

xpleaf@leaf:~/下载/apr-util-1.5.4$ ./configure --with-apr=/usr/local/apr ...... config.status: creating test/Makefile config.status: creating include/private/apu_config.h config.status: executing default commands

这样的话预编译就算完成了,再执行下面的make和sudo make install:

xpleaf@leaf:~/下载/apr-util-1.5.4$ make xpleaf@leaf:~/下载/apr-util-1.5.4$ sudo make install

OK,这样的话,apr-util的安装也完成了。

(3)pcre安装

这不是必需的,前提是你的系统原来已经安装了它的库,如果还没有安装的话,在你编译Apache的时候就会出现下面的错误提示:

configure: error: pcre-config for libpcre not found. PCRE is required and available from http://pcre.org/

所以如果你也出现了这样的情况,请先下载安装pcre。

下载地址: http://sourceforge.net/projects/pcre/files/pcre/

这里我下载的版本是: pcre-8.38.tar.gz

安装步骤跟上面的一样,而且这里也不会出现什么问题,直接给出步骤好了:

xpleaf@leaf:~/下载$ tar zxvf pcre-8.38.tar.gz 
xpleaf@leaf:~/下载/pcre-8.38$ ./configure
xpleaf@leaf:~/下载/pcre-8.38$ make xpleaf@leaf:~/下载/pcre-8.38$ sudo make install

pcre也安装完之后,下面就可以真正安装Apache了。

(4)Apache安装

在上面的三个软件安装完成之后,这下面才开始安装Apache.

下载地址: http://httpd.apache.org/download.cgi

我下载的版本是: httpd-2.4.18.tar.gz

a.安装   

只要上面的几步完成了,安装apache就比较容易了,依次执行下面的命令就可以了。

xpleaf@leaf:~/下载$ tar zxvf httpd-2.4.18.tar.gz 
xpleaf@leaf:~/下载/httpd-2.4.18$ ./configure --enable-module=shared xpleaf@leaf:~/下载/httpd-2.4.18$ make xpleaf@leaf:~/下载/httpd-2.4.18$ sudo make install

b.参数说明

需要注意的是,如果在执行./configure时没有指定apache的安装目录,默认是安装在 /usr/local/apache2 ,你也可以通过下面的方式来查看它的安装目录:

xpleaf@leaf:~$ whereis apache2
apache2: /usr/local/apache2

另外,上面在执行./configure时添加了 -enable-module=shared 参数,即 通过把模块编译成动态共享对象,让Apache启动时动态加载,这样以后需要加载新模块时,只需在配置文件中设置即可 。当然,为了这样的便捷性而损失一定的性能是否值得,个人衡量。所以这个参数你不加也是没有问题的。

c.无法启动的解决方案

安装完成后,就可以启动了,因为采用的是编译安装,所以需要用下面的方式启动:

xpleaf@leaf:~$ sudo /usr/local/apache2/bin/apachectl start
/usr/local/apache2/bin/httpd: error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory

但是你会发现又报错了,而且报的错为: 无法加元libpcre.so.1库函数 。

libpcre.so.1 ,很熟悉的名字,前面不是已经安装了?确实是安装的,只是Apache没有找到它而已,查看一下:

xpleaf@leaf:~$ ldd /usr/local/apache2/bin/httpd linux-vdso.so.1 =>  (0x00007ffdf9fe6000)libpcre.so.1 => not foundlibaprutil-1.so.0 => /usr/local/apr/lib/libaprutil-1.so.0 (0x00007f8192a47000) libapr-1.so.0 => /usr/local/apr/lib/libapr-1.so.0 (0x00007f8192813000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f81925f5000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f819222b000) libexpat.so.0 => /usr/local/apr/lib/libexpat.so.0 (0x00007f8192002000) libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007f8191dca000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f8191bc6000) /lib64/ld-linux-x86-64.so.2 (0x00005637a587b000)

这时我们把pcre对应的该库函数软件链接到 /lib 目录就可以了:

xpleaf@leaf:~$ sudo ln -s /usr/local/lib/libpcre.so.1 /lib

下面再启动试试:

xpleaf@leaf:~$ sudo /usr/local/apache2/bin/apachectl start
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message

OK,这时再打开浏览器,经典的"It works"显示出来了:

id="iframe_0.35380387009415504" src="data:text/html;charset=utf8,%3Cimg%20id=%22img%22%20src=%22http://img2.tuicool.com/7fA73eF.png!web?_=5556696%22%20style=%22border:none;max-width:999px%22%3E%3Cscript%3Ewindow.onload%20=%20function%20()%20%7Bvar%20img%20=%20document.getElementById('img');%20window.parent.postMessage(%7BiframeId:'iframe_0.35380387009415504',width:img.width,height:img.height%7D,%20'http://www.cnblogs.com');%7D%3C/script%3E" frameborder="0" scrolling="no" style="margin: 0px; padding: 0px; border-width: initial; border-style: none; width: 550px; height: 132px;">

这样的话,Apache的安装也算是完成了,下面就说说CGI的配置。

2.CGI配置

Apache支持CGI配置,下面就来详细说明配置的过程。

找到安装Apache的目录 /usr/local/apache2/conf ,并对 httpd.conf 配置文件进行修改,如下面的说明:

(1)加载cgi模块

大概在httpd.conf的137行:

#LoadModule cgid_module modules/mod_cgid.so

去掉注释:

LoadModule cgid_module modules/mod_cgid.so

(2)设置cgi脚本文件路径

大概在httpd.conf的329行:

ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/"

可以看到apache将"/usr/local/apache2/cgi-bin/"映射为/cgi-bin/,即当你通过浏览器访问/cgi-bin/目录时,实际上就是访问"/usr/local/apache2/cgi-bin/"目录,为了方便,我将其设置为如下:

ScriptAlias /cgi-bin/ /home/xpleaf/Source_Code/cgi_for_py/

注意这里 路径末尾一定要加/ ,否则apache是无法打到该路径下的文件的。

(3)设置cgi路径的访问权限

大概在httpd.conf195行:

<Directory />AllowOverride noneRequire all denied
</Directory>

将上面的内容全部修改为下面的内容:

<Directory "/home/xpleaf/Source_Code/cgi_for_py/"> AllowOverride None Options +ExecCGI Order allow,deny Allow from all </Directory>

注意这里的目录是修改为前面我们改的:/home/xpleaf/Source_Code/cgi_for_py/

这样的修改是有原因的,如果没有在这里设置权限,当你在浏览器中访问你的cgi脚本文件时,得到的可能是这样的提示:

Forbidden

(4)设置apache可解释python的cgi脚本文件

大概在httpd.conf的386行:

#AddHandler cgi-script .cgi

去掉注释,将其修改为:

AddHandler cgi-script .cgi .py

加上.py后,就可以解释python的脚本文件了,如果你需要解释shell的脚本文件,可以添加.pl,其它的类似。

OK,完成上面的4步之后,CGI配置就算完成了。不过在配置完成之后,我们需要重启一下Apache服务:

xpleaf@leaf:/usr/local/apache2/conf$ sudo /usr/local/apache2/bin/apachectl restart
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message

3.添加CGI脚本文件

(1)创建cgi脚本文件

在/home/xpleaf/Source_Code/cgi_for_py/目录下添加下面一个文件,并命名为hello.py:

#!/usr/bin/env python
# -*- coding: UTF-8 -*-print "Content-type:text/html"
print
print '<html>'
print '<head>'
print '<title>Hello</title>' print '</head>' print '<body>' print '<h2>Hello Word! This is my first CGI program</h2>' print '</body>' print '</html>'

注意 #!/usr/bin/env python 一定要加上,否则会出现500错误提示。   

(2)设置cgi脚本文件的文件权限为755    

xpleaf@leaf:~/Source_Code/cgi_for_py$ chmod 755 hello.py
xpleaf@leaf:~/Source_Code/cgi_for_py$ ls -l hello.py -rwxr-xr-x 1 xpleaf xpleaf 289 1月 31 16:02 hello.py

此步非常非常重要 ,如果忘记这步,无论你怎么找配置文件也找不出错误,就算看代码也不会发现有错误,然后通过浏览器访问时会一直显示500错误,所以一定要记得该步操作!   

4.通过浏览器访问cgi脚本文件

直接在浏览器中输入 localhost/cgi-bin/hello.py 或 127.0.0.1/cgi-bin/hello.py 就可以访问我们的cgi脚本文件了:

id="iframe_0.8784882630187423" src="data:text/html;charset=utf8,%3Cimg%20id=%22img%22%20src=%22http://img0.tuicool.com/RzE7jyf.png!web?_=5556696%22%20style=%22border:none;max-width:999px%22%3E%3Cscript%3Ewindow.onload%20=%20function%20()%20%7Bvar%20img%20=%20document.getElementById('img');%20window.parent.postMessage(%7BiframeId:'iframe_0.8784882630187423',width:img.width,height:img.height%7D,%20'http://www.cnblogs.com');%7D%3C/script%3E" frameborder="0" scrolling="no" style="margin: 0px; padding: 0px; border-width: initial; border-style: none; width: 550px; height: 52px;">终于可以了!

Ok,那么到这里就结束了,如果是完全按照上面的操作来进行的话,相信是不会有太大的问题的,只是要注意的细节问题比较多。当然肯定不会跟我这里的情况完全一样,因为这还取决于你所使用的环境,这里我的操作系统是:Ubuntu 15.10,所以还是仅提供参考。

希望帮到有需要的朋友。

这篇关于ubuntu12.04进行python cgi开发的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1087633

相关文章

利用python实现对excel文件进行加密

《利用python实现对excel文件进行加密》由于文件内容的私密性,需要对Excel文件进行加密,保护文件以免给第三方看到,本文将以Python语言为例,和大家讲讲如何对Excel文件进行加密,感兴... 目录前言方法一:使用pywin32库(仅限Windows)方法二:使用msoffcrypto-too

使用Python实现矢量路径的压缩、解压与可视化

《使用Python实现矢量路径的压缩、解压与可视化》在图形设计和Web开发中,矢量路径数据的高效存储与传输至关重要,本文将通过一个Python示例,展示如何将复杂的矢量路径命令序列压缩为JSON格式,... 目录引言核心功能概述1. 路径命令解析2. 路径数据压缩3. 路径数据解压4. 可视化代码实现详解1

python获取网页表格的多种方法汇总

《python获取网页表格的多种方法汇总》我们在网页上看到很多的表格,如果要获取里面的数据或者转化成其他格式,就需要将表格获取下来并进行整理,在Python中,获取网页表格的方法有多种,下面就跟随小编... 目录1. 使用Pandas的read_html2. 使用BeautifulSoup和pandas3.

Python装饰器之类装饰器详解

《Python装饰器之类装饰器详解》本文将详细介绍Python中类装饰器的概念、使用方法以及应用场景,并通过一个综合详细的例子展示如何使用类装饰器,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录1. 引言2. 装饰器的基本概念2.1. 函数装饰器复习2.2 类装饰器的定义和使用3. 类装饰

Python 交互式可视化的利器Bokeh的使用

《Python交互式可视化的利器Bokeh的使用》Bokeh是一个专注于Web端交互式数据可视化的Python库,本文主要介绍了Python交互式可视化的利器Bokeh的使用,具有一定的参考价值,感... 目录1. Bokeh 简介1.1 为什么选择 Bokeh1.2 安装与环境配置2. Bokeh 基础2

Pandas使用AdaBoost进行分类的实现

《Pandas使用AdaBoost进行分类的实现》Pandas和AdaBoost分类算法,可以高效地进行数据预处理和分类任务,本文主要介绍了Pandas使用AdaBoost进行分类的实现,具有一定的参... 目录什么是 AdaBoost?使用 AdaBoost 的步骤安装必要的库步骤一:数据准备步骤二:模型

使用Pandas进行均值填充的实现

《使用Pandas进行均值填充的实现》缺失数据(NaN值)是一个常见的问题,我们可以通过多种方法来处理缺失数据,其中一种常用的方法是均值填充,本文主要介绍了使用Pandas进行均值填充的实现,感兴趣的... 目录什么是均值填充?为什么选择均值填充?均值填充的步骤实际代码示例总结在数据分析和处理过程中,缺失数

如何使用 Python 读取 Excel 数据

《如何使用Python读取Excel数据》:本文主要介绍使用Python读取Excel数据的详细教程,通过pandas和openpyxl,你可以轻松读取Excel文件,并进行各种数据处理操... 目录使用 python 读取 Excel 数据的详细教程1. 安装必要的依赖2. 读取 Excel 文件3. 读

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

Python的time模块一些常用功能(各种与时间相关的函数)

《Python的time模块一些常用功能(各种与时间相关的函数)》Python的time模块提供了各种与时间相关的函数,包括获取当前时间、处理时间间隔、执行时间测量等,:本文主要介绍Python的... 目录1. 获取当前时间2. 时间格式化3. 延时执行4. 时间戳运算5. 计算代码执行时间6. 转换为指