2009-12-21 49 views
1

我想在Apache 2.2.14下使用Mac OS X 10.6上的非默認python安裝來運行mod_wsgi 3.1。Snow Leopard上的mod_wsgi python版本不匹配

下載的mod_wsgi源後,我跑:

sudo apachectl -k stop 

然後

./configure --with-python=/usr/local/Cellar/python/2.6.4/bin/python 
make 
sudo make install 

然後我啓動Apache的再次

sudo apachectl -k start 

當我貓在/ var /日誌/的httpd/error_log我看到:

[Mon Dec 21 12:27:26 2009] [warn] mod_wsgi:爲Python/2.6.4編譯。

[Mon Dec 21 12:27:26 2009] [warn] mod_wsgi:運行時使用Python/2.6.1。

[週一年12月21 12點27分26秒2009] [聲明]的Apache/2.2.14(UNIX)DAV/2的mod_wsgi/3.1的Python/2.6.1配置 - 恢復正常操作

當我運行otool -L mod_wsgi.so是看到:

mod_wsgi.so:

/System/Library/Frameworks/Python.framework/Versions/2.6/Python(兼容版本2.6.0,目前版本2.6.1)

/usr/lib/libSystem.B.dylib(兼容版本1.0.0,當前版本125.0.0)

是怎麼回事?爲什麼它與系統框架鏈接?

下面是輸出從我mod_wsgi的配置和構建命令:


阿基米德:mod_wsgi的-3.1 awolf $的./configure --with-蟒蛇=在/ usr /本地/庫/蟒蛇/ 2.6。 4 /斌/ Python的

檢查apxs2 ......沒有

檢查APXS ... /選擇/ Apache2的/ bin中/ APXS

檢查Apache的版本2.2.14 ...

配置:創建./config.status

config.status:創建Makefile文件

阿基米德:mod_wsgi的-3.1 awolf $使

的/ opt/Apache2的/斌/的apxs -c -I/usr/local/Cellar/python/2.6.4/include/python2.6 -DNDEBUG -Wc,' - arch x86_64'mod_wsgi.c -L/usr/local/Cellar/python/2.6.4/lib -L ​​/ usr /local/Cellar/python/2.6.4/lib/python2.6/config -arch x86_64 -lpython2。6 -ldl /Library/Webserver/build/libtool --silent --mode = compile gcc -prefer-pic -DDARWIN -DSIGPROCMASK_SETS_THREAD_MASK -no-cpp -precomp -g -O2 -I/opt/apache2/include -I/opt/apache2/include -I/opt/apache2/include -arch x86_64 -I/usr/local/Cellar/python/2.6.4/include/python2.6 -DNDEBUG -c -o mod_wsgi.lo mod_wsgi.c & &觸摸mod_wsgi.slo

在文件從/usr/local/Cellar/python/2.6.4/include/python2.6/Python.h:125包括,

   from mod_wsgi.c:135: 

的/ usr /本地/窖/python/2.6.4/include/python2.6/modsupport.h:27:warning:'PyArg_ParseTuple'是一個無法識別的格式函數類型 /Library/Webserver/build/libtool --silent --mode = link gcc -o mod_wsgi.la -rpath/opt/apache2/modules -module -avoid-version mod_wsgi.lo -L/usr/local/Cellar/python /2.6.4/lib -L ​​/ usr/local/Cellar/python/2.6.4/lib/python2.6/config -arch x86_64 -lpython2.6 -ldl

Archimedes:mod_wsgi-3.1 awolf $ sudo make安裝

密碼:

的/ opt/Apache2的/斌/的apxs -i -S LIBEXECDIR = /選擇/的Apache2 /模塊-n 'mod_wsgi的' mod_wsgi.la

/庫/ Web服務器/建設/ instdso.sh SH_LIBTOOL ='/ Library/Webserver/build/libtool'mod_wsgi.la /選擇/ apache2的/模塊

/庫/網絡服務器/建造/ libtool的--mode =安裝CP mod_wsgi.la /選擇/ apache2的/模塊/

CP的.libs/mod_wsgi.so /選擇/ apache2的/模塊/mod_wsgi.so

CP的.libs/mod_wsgi.lai /opt/apache2/modules/mod_wsgi.la

CP的.libs/mod_wsgi.a /opt/apache2/modules/mod_wsgi.a

chmod 644 /opt/apache2/modules/mod_wsgi.a

ranlib的/opt/apache2/modules/mod_wsgi.a

回答

0

格雷厄姆幫我解決了這個在mod_wsgi的郵件列表上。

http://groups.google.com/group/modwsgi/browse_thread/thread/4046eaf290a49b1e/ae14888450de39f5#ae14888450de39f5

這裏有一個總結:

問題是我的Python的安裝是通過自制完成的。 Homebrew的python沒有安裝爲框架或dylib安裝,因此它不能用於嵌入(例如在Apache/mod_wsgi中)。

相反,我從源代碼安裝Python的2.6.4:

./configure --prefix=/usr/local/python-2.6.4 --enable-framework=/usr/local/python-2.6.4/frameworks --enable-universalsdk=/ MACOSX_DEPLOYMENT_TARGET=10.5 --with-universal-archs=3-way 
make 
sudo make install 

我是能夠建立一個Python版本2.6.4的,我可以再建 mod_wsgi的有:

./configure --with-python=/usr/local/python-2.6.4/bin/python 
make 
sudo make install 

要確認:

otool -L /opt/apache2/modules/ mod_wsgi.so 

的/ opt/Apache2的/modules/mod_wsgi.so: /usr/lib/libSystem.B.dylib(兼容版本1.0.0,當前 版本125.0.0) /usr/local/python-2.6.4/frameworks/Python.framework/版本/ 2.6/Python(兼容版本2.6.0,當前版本2.6.0)

顯示python現在使用2.6.4框架而不是系統。當我啓動apache時,我不再收到版本不匹配警告。

我重新安裝了django,psycopg2等到我的新python安裝中,並且所有東西都像魅力一樣工作。 再次感謝您的幫助!

0

因爲某種原因,一些Python框架從源代碼安裝,通常MacPorts的,有什麼不對嵌入在Python框架中的信息和運行時查找路徑可執行文件的設置不正確。因此,它最終會改用/ System/Library中的Python框架。

當您爲mod_wsgi運行'configure'時,添加其他選項'--disable-framework'。例如:

./configure --with-python=/usr/local/Cellar/python/2.6.4/bin/python --disable-framework 

這將改變Python庫/框架的鏈接方式並可能解決問題。

欲瞭解更多詳情,請參見bug修復(1)和(2):

http://code.google.com/p/modwsgi/wiki/ChangesInVersion0206

+0

感謝您的回覆。不幸的是,--disable-framework沒有效果。 (我第一次做了:rm /opt/apache2/modules/mod_wsgi.so; rm -rf〜/ Downloads/mod_wsgi3.1/build; make distclean)。我會立即查看你的鏈接,看看裏面是否有任何寶石。 – awolf 2009-12-21 22:49:34

+0

順便說一下,我用Homebrew將python安裝到/ var/local/Cellar中...... – awolf 2009-12-21 22:52:38

+0

然後將問題轉移到mod_wsgi郵件列表中,以便雙重確認您實際上正在執行所要求的內容,結果是預計。這裏很難支持複雜的問題,應該使用郵件列表。 – 2009-12-22 20:06:42

2

這篇文章很舊,但仍然出現在關於mac + homebrew + python的搜索中,所以我想我會添加一些有用的信息。作爲OP,我遇到了問題,只是使用了不同的模塊(uwsgi)。我知道你不必放棄自制。事實上,Homebrew可以將python作爲框架安裝;你只需要告訴它這樣做:

% brew uninstall python 
Uninstalling /usr/local/Cellar/python/2.7.2... 
% brew install python --universal --framework 

......一切都好。