2013-07-03 114 views
0

安裝mod_wsgi的modwisgi-3.4中make我收到以下錯誤: mod_wsgi.c:142:20: error: Python.h: No such file or directory 官方排查頁http://code.google.com/p/modwsgi/wiki/InstallationIssues建議將「對應於你有Python運行包的Python安裝開發包安裝」。無法嘗試安裝從源代碼

現在如何從源代碼安裝上述開發包?我使用httpd-2.2.24和modwisgi 3.4在Linux上運行python2.7.4。

+0

你需要你的發行版python開發包。它是Redhat(Fedora/CentOS)還是基於Debian的(Ubuntu/Mint)機器? – tMC

+0

這是基於Redhat .. –

+1

'yum install python-devel' – tMC

回答

1

運行以下命令:

$ python-config --cflags 

這會給你一個標誌的列表傳遞給編譯器找到Python.h:

$ python-config --cflags 
-I/usr/include/python3.3m -I/usr/include/python3.3m -Wno-unused-result -DDYNAMIC_ANNOTATIONS_ENABLED= 
1 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -march=x86-64 -mtune=generic -O2 -pipe -fstack-pr 
otector --param=ssp-buffer-size=4 -march=x86-64 -mtune=generic -O2 -pipe -fstack-protector --param=ss 
p-buffer-size=4 

你可能也想運行python-config --ldflags爲必要的鏈接器標誌。

如果您已經安裝了Python的多個版本,您可以指定,即python2.7-config

然後,我將手動編輯該文件posix-ap2X.mk.in,使其包含以下內容:

CFLAGS = @[email protected] $(shell python-config --cflags) 
LDFLAGS = @[email protected] $(shell python-config --ldflags) 

configure.ac的Autoconf文件試圖找出這些東西,但它似乎以一種笨重的方式來做,顯然不適合你,所以這種手動方式有望解決問題。

編輯:哦,另外,請確保您使用正確的,並且您指定了必要時使用哪個Python解釋器。例如,如果您已經將Python從源代碼安裝到了某個非標準位置,而在通常位置安裝了另一個版本,請務必指定該代碼(即在上述編輯中使用/path/to/my/python-config並將參數PYTHON=/path/to/my/python傳遞給configure腳本) 。實際上,只需指定正確的Python解釋器就可能導致包含的configure腳本正確執行其工作。

+0

mod_wsgi配置腳本完全適用於你,你自己不需要這樣做。 –

+0

是的,我注意到最終我讀了'configure.ac'多了一些,因此進行了最後的編輯。順便說一句,據我瞭解,通過PYTHON變量指定Python解釋器位置是標準的,而不是通過'--with-python'標誌。另外,我建議檢查GNU pyconfigure以獲取一些方便的Python Autoconf宏(免責聲明:我是pyconfigure維護者;請隨時直接與我聯繫以繼續討論,以免混淆問題)。 – 2013-07-04 07:14:44

+0

Apache配置腳本使用--with來指示要用於Apache的包的位置。該腳本遵循該慣例。這就是爲什麼這樣做的歷史。 –

0

您必須使用--with-python選項來配置mod_wsgi,告訴它從源代碼安裝的'python'二進制文件的路徑。它看起來像你還沒有這樣做,它仍然使用沒有安裝相應的開發包的系統Python。當您運行它並告訴我們您自己安裝的Python實際所在的位置時,請提供實際的「configure」腳本命令行的詳細信息。還要確保你運行'make distclean'來清除任何舊版本的結果,以防令人困惑的事情發生。

+0

嗨格雷厄姆, 我給下面的命令配置: '的./configure --prefix = custom_modwsgi_location --with-APXS = apxs_path_of_custom_apache --with-蟒蛇= custom_python_path --libdir = lib_path_prefix_used_for_apache' –

+0

供應的實際路徑你用於--with-python。我想確保你指出了正確的事情。如果你不這樣做,它會回退到系統Python。 –

+0

我使用的配置命令: ** apache **: './configure --with-included-apr --prefix = $ MY_APPS/httpd27 --libdir = $ MY_APPS/lib27 --enable-ssl --enable -mods-shared = all --with-mpm = worker' ** modwsgi **: './configure --prefix = $ MY_APPS/modwsgi27 --with-apxs = $ MY_APPS/httpd27/bin/apxs - -with-python = $ MY_APPS/python2.7/bin/python --libdir = $ MY_APPS/lib27' –