(免責聲明:我只使用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。 –