如何替换/更新Apache使用的expat库版本?

0 投票
1 回答
4939 浏览
提问于 2025-04-17 05:59

(免责声明:我刚开始使用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

1 个回答

1

你是在找这个吗?这个问题挺有名的,我自己也遇到过几次。

撰写回答