2011-11-09 62 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庫的版本。我需要知道的是我將如何去做這件事? –

相關問題