我正在尝试使用Mac OS X 10.6上的非默认python安装在Apache 2.2.14下运行mod_wsgi 3.1。
下载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
当我cat / var / log / 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运行时。
[2009年12月21日12:27:26] [通知] 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-python = / usr / local / Cellar / python / 2.6.4 / bin / python
检查apxs2 ...没有
检查apxs ... / opt / apache2 / bin / apxs
检查Apache版本... 2.2.14
configure:创建./config.status
config.status:创建Makefile
阿基米德:mod_wsgi-3.1 awolf $ make
/ opt / apache2 / bin / 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/local/Cellar/python/2.6.4/include/python2.6/modsupport.h:27:警告:'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
阿基米德:mod_wsgi-3.1 awolf $ sudo make install
密码:
/ opt / apache2 / bin / apxs -i -S LIBEXECDIR = / opt / apache2 / modules -n'mod_wsgi'mod_wsgi.la
/Library/Webserver/build/instdso.sh SH_LIBTOOL ='/ Library / Webserver / build / libtool'mod_wsgi.la / opt / apache2 / modules
/ Library / Webserver / build / libtool --mode = install cp mod_wsgi.la / opt / apache2 / modules /
cp .libs / mod_wsgi.so /opt/apache2/modules/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 :(得分:2)
这篇文章很老,但仍然出现在关于mac + homebrew + python的搜索中,所以我想我会添加一些有用的信息。我有OP的问题,只是使用不同的模块(uwsgi)。我了解到你不必放弃自制软件。事实上,Homebrew可以将python作为框架安装;你必须告诉它这样做:
% brew uninstall python
Uninstalling /usr/local/Cellar/python/2.7.2...
% brew install python --universal --framework
......一切都很好。
答案 1 :(得分: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库/框架的链接方式,并可能解决问题。
有关详细信息,请参阅:
中的错误修复(1)和(2)答案 2 :(得分:0)
以下是摘要:
问题是我的安装python是通过Homebrew完成的。 Homebrew的python没有安装为框架OR 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 with:
./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/Versions/2.6/Python(兼容版本2.6.0,当前版本2.6.0)
表明python现在使用的是2.6.4框架,而不是系统框架。当我启动apache时,我不再收到版本不匹配的警告。
我将django,psycopg2等重新安装到我的新python安装中,一切都像魅力一样。 再次感谢你的帮助!