2011-11-09 33 views
0

(免责声明:我只使用Linux的开始,没有与配置Apache和Python很多经验)如何替换/更新Apache使用的expat库的版本?

我有一个更深入这里http://code.google.com/p/modwsgi/wiki/IssuesWithExpatLibrary解释一个相当普遍的问题。基本上,我99%确定我的主要问题是我的Apache使用的是expat库的版本1.95.7,而我的Python使用的是expat库的2.0.1版;因此,当我一起使用它们时,会出现分段错误。

正如页面底部的链接所述,我需要将Apache使用的expat库的版本替换/更新为Python使用的版本。我将如何做到这一点? (请记住,我对这种事情非常缺乏经验。)

编辑:此问题已解决。下面我记录了我为安装Apache所做的一切,从源代码构建Python,安装mod_wsgi,并解决令人讨厌的expat问题,以供我参考以及遇到类似问题的任何其他人员参考。

1)安装了Ubuntu与五笔

安装Apache

2)在Ubuntu,下载所提取的源码的Apache的Unix源的httpd-2.2.21.tar.gz

3)来自Apache HTTPDd tarbell:

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并打印出“It works!”

9)停止Apache HTTP服务器:

sudo /usr/local/apache2/bin/apachectl -k stop 

从源代码安装Python

10)撷取的所有共同的包需要建立任何东西(例如,编译器等)

sudo apt-get install build-essential 

11)编辑过的来源。在/ etc /公寓列表文件中加入完全一样的“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)包装并蟒配置为从解压缩的目录内:

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)测试本地主机并印上“Hello World!“

28)停止阿帕奇:

sudo /usr/local/apache2/bin/apachectl -k stop 

测试可怕的外籍问题:

29)编辑后test.wsgi文件:

sudo nano /usr/local/lib/python2.7/site-packages/django/test.wsgi 

添加以下内容到文件顶部:

import pyexpat 

30)开始的Apache: “Hello World” 的

sudo /usr/local/apache2/bin/apachectl -k start 

31)它打印有一个上帝。

32)停止阿帕奇:

$ sudo /usr/local/apache2/bin/apachectl -k stop 
+0

您使用的是什么版本的Python?这只是为了影响旧的Python版本,除非你的发行版已经与Python的构建方式搞砸了,取而代之的是Python自己的expat或者强制它链接到不同的expat。 –

+0

2.7.2+哦,真的吗?但愿如此。我不确定的原因是我测试了导入pyexpat,并且当我检查本地主机时,它应该打印出“Hello World”,但是没有。然后我检查了我的Apache错误日志并看到了预期的分段错误错误。 –

+1

该发行版已经明确地构建了Python,以便使用外部pyexpat实现,因此导致该问题。您可能需要向发行人投诉。也可以从源代码自己构建Python,它将默认使用内部expat实现。然后需要对该Python重新编译mod_wsgi。 –

回答

0

寻找this?这是众所周知的 - 我自己也跟着这几次。

+0

不,这与我发布的链接中的信息完全相同。它几乎被复制和粘贴。 –

+0

我知道我需要替换/更新Apache使用的expat库的版本。我需要知道的是我将如何去做这件事? –

相关问题