mod_wsgi(在mac os x上使用anaconda python)使用错误的libpython库

时间:2015-05-18 10:11:30

标签: python macos apache python-2.7 mod-wsgi

我尝试将mod_wsgi与非系统python安装(anaconda)一起使用。但是mod_wsgi总是使用系统python提供的libpython。如何更改配置以完全使用anaconda python?

设定:

Mac OS X 10.10.3
Python 2.7.9 :: Anaconda 2.2.0 (x86_64)
system provided Apache/2.4.10 (Unix)
mod_wsgi-4.4.11 src

我安装了mod_wsgi:

./configure --with-python=/opt/anaconda/bin/python2.7
make
sudo make install

- with-python选项指向anaconda python二进制文件。通常这应该足以使用anaconda python。

apache配置

LoadModule wsgi_module /usr/libexec/apache2/mod_wsgi.so
...
WSGIPythonHome /opt/anaconda
WSGIScriptAlias /~dlangenk/wsgi/test /Users/dlangenk/Sites/wsgi/test.wsgi

测试wsgi应用程序

import sys 

def application(environ, start_response):
    status = '200 OK'

    output = ''
    output += 'sys.version = %s\n' % repr(sys.version)
    output += 'sys.prefix = %s\n' % repr(sys.prefix)
    output += 'sys.path = %s\n' % repr(sys.path)

    response_headers = [('Content-type', 'text/plain'),
                    ('Content-Length', str(len(output)))]
    start_response(status, response_headers)

    return [output]

测试脚本的输出

# if everything would work sys.version should point to the 2.7.9 python version of anaconda
sys.version = '2.7.6 (default, Sep  9 2014, 15:04:36) \n[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.39)]'
sys.prefix = '/opt/anaconda'
sys.path = ['/opt/anaconda/lib/python2.7/site-packages/MySQL_python-1.2.5-py2.7-macosx-10.5-x86_64.egg', '/opt/anaconda/lib/python2.7/site-packages/Theano-0.6.0-py2.7.egg', '/opt/anaconda/lib/python2.7/site-packages/mod_wsgi_metrics-1.1.0-py2.7.egg', '/opt/anaconda/lib/python27.zip', '/opt/anaconda/lib/python2.7', '/opt/anaconda/lib/python2.7/plat-darwin', '/opt/anaconda/lib/python2.7/plat-mac', '/opt/anaconda/lib/python2.7/plat-mac/lib-scriptpackages', '/opt/anaconda/Extras/lib/python', '/opt/anaconda/lib/python2.7/lib-tk', '/opt/anaconda/lib/python2.7/lib-old', '/opt/anaconda/lib/python2.7/lib-dynload', '/opt/anaconda/lib/python2.7/site-packages', '/opt/anaconda/lib/python2.7/site-packages/PIL', '/opt/anaconda/lib/python2.7/site-packages/Sphinx-1.2.3-py2.7.egg', '/opt/anaconda/lib/python2.7/site-packages/aeosa', '/opt/anaconda/lib/python2.7/site-packages/cryptography-0.8-py2.7-macosx-10.5-x86_64.egg', '/opt/anaconda/lib/python2.7/site-packages/setuptools-15.2-py2.7.egg']

输出apache错误日志

[Mon May 18 10:41:11.656749 2015] [wsgi:warn] [pid 18114] mod_wsgi: Compiled for Python/2.7.9.
[Mon May 18 10:41:11.656929 2015] [wsgi:warn] [pid 18114] mod_wsgi: Runtime using Python/2.7.6.

我已经尝试过:

1) 当使用mod_wsgi-express设置与mod_wsgi捆绑的新apache安装时,会正确选取anaconda python库。但出于不同的原因,我想使用系统apache。

2) 如果我删除/usr/lib/libpython-2.7.dylib并将其替换为/opt/anaconda/lib/libpython-2.7.dylib,则sys.version的输出正确显示为2.7.9 | Anaconda 2.2.0(x86_64) | ......但我无法删除系统libpython库,因为Mac OSX使用了系统python。

3) 正如官方Documentation所建议的那样虽然说明它已经修复但我修改了makefile以链接到/ opt / anaconda / lib中的libpython并进一步将runpath设置为/ opt / anaconda / lib。什么都没有用

0 个答案:

没有答案