(免责声明:我只使用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
您使用的是什么版本的Python?这只是为了影响旧的Python版本,除非你的发行版已经与Python的构建方式搞砸了,取而代之的是Python自己的expat或者强制它链接到不同的expat。 –
2.7.2+哦,真的吗?但愿如此。我不确定的原因是我测试了导入pyexpat,并且当我检查本地主机时,它应该打印出“Hello World”,但是没有。然后我检查了我的Apache错误日志并看到了预期的分段错误错误。 –
该发行版已经明确地构建了Python,以便使用外部pyexpat实现,因此导致该问题。您可能需要向发行人投诉。也可以从源代码自己构建Python,它将默认使用内部expat实现。然后需要对该Python重新编译mod_wsgi。 –