如何替换/更新Apache使用的expat库版本?
(免责声明:我刚开始使用Linux,对配置Apache和Python没有太多经验。)
我遇到了一个比较常见的问题,详细说明可以在这里找到 http://code.google.com/p/modwsgi/wiki/IssuesWithExpatLibrary。基本上,我99%确定我的主要问题是,Apache使用的是1.95.7版本的expat库,而我的Python使用的是2.0.1版本的expat库;因此,当我把它们一起用时,就会出现段错误。
正如页面底部链接所解释的那样,我需要把Apache使用的expat库版本替换成Python使用的版本。我该怎么做呢?(请记住,我对此类事情非常不熟悉。)
编辑:这个问题已经解决。下面我记录了我安装Apache、从源代码构建Python、安装mod_wsgi以及解决令人头疼的expat问题的所有步骤,供我自己和其他遇到类似问题的人参考。
1) 使用Wubi安装了Ubuntu
安装Apache
2) 在Ubuntu上下载了Apache的Unix源代码 httpd-2.2.21.tar.gz
3) 从Apache HTTPd的压缩包中解压源代码:
gzip -d httpd-2.2.21.tar.gz
tar xvf httpd-2.2.21.tar
4) 在解压后的目录中配置Apache HTTPd的源代码树:
sudo ./configure --prefix=/usr/local/apache2
5) 构建Apache HTTPd包的各个部分:
sudo make
6) 在第4步指定的目录下安装该包:
sudo make install
7) 启动Apache HTTP服务器:
sudo /usr/local/apache2/bin/apachectl -k start
8) 检查localhost,显示“它工作!”
9) 停止Apache HTTP服务器:
sudo /usr/local/apache2/bin/apachectl -k stop
从源代码安装Python
10) 获取构建任何东西所需的常用软件包(例如编译器等):
sudo apt-get install build-essential
11) 编辑/etc/apt下的sources.list文件,在文件末尾添加相同的“deb”行,但用“deb-src”替代:
sudo nano /etc/apt/sources.list
12) 更新apt-get以识别更改:
sudo apt-get update
13) 获取构建Python所需的所有库:
sudo apt-get build-dep python2.7
14) 下载Python源代码 Python-2.7.2.tgz,解压后在目录中运行以下命令:
sudo ./configure --enable-shared --prefix=/usr/local
15) 构建Python:
sudo make
16) 安装Python:
sudo make install
安装mod_wsgi
17) 下载mod_wsgi源代码压缩包 mod_wsgi-3.3.tar.gz
18) 解压并在解压后的目录中与Python进行配置:
sudo ./configure --with-apxs=/usr/local/apache2/bin/apxs \
--with-python=/usr/local/bin/python2.7
19) 构建配置好的包:
sudo make
20) 安装到Apache模块中:
sudo make install
21) 下载Django-1.3.1.tar.gz
22) 解压文件:
tar xzvf Django-1.3.1.tar.gz
23) 在目录中安装Django项目:
sudo python setup.py install
24) 编辑Apache的httpd.conf文件:
sudo nano /usr/local/apache2/conf/httpd.conf
在文件末尾添加以下指令:
LoadModule wsgi_module /usr/local/apache2/modules/mod_wsgi.so
WSGIScriptAlias / /usr/local/lib/python2.7/site-packages/django/test.wsgi
<Directory /usr/local/lib/python2.7/site-packages/django>
Order deny,allow
Allow from all
</Directory>
25) 在Django项目目录中创建一个测试文件:
sudo nano /usr/local/lib/python2.7/site-packages/django/test.wsgi
在文件中添加以下内容:
def application(environ, start_response):
status = '200 OK'
output = 'Hello World!'
response_headers = [('Content-type', 'text/plain'),
('Content-Length', str(len(output)))]
start_response(status, response_headers)
return [output]
26) 启动Apache:
sudo /usr/local/apache2/bin/apachectl -k start
27) 测试localhost,显示“Hello World!”
28) 停止Apache:
sudo /usr/local/apache2/bin/apachectl -k stop
测试令人头疼的Expat问题:
29) 编辑test.wsgi文件:
sudo nano /usr/local/lib/python2.7/site-packages/django/test.wsgi
在文件顶部添加以下内容:
import pyexpat
30) 启动Apache:
sudo /usr/local/apache2/bin/apachectl -k start
31) 它显示“Hello World!”真是太好了。
32) 停止Apache:
$ sudo /usr/local/apache2/bin/apachectl -k stop