wsgi和虚拟环境

我正在用apache,mod_wsgi,virtual env设置Django

我有一个虚拟的env ,我想在这里使用:[Missleading name - long story!] / home / andy / Dev / python / async-mongo /

我下载了mod_wsgi并以root身份用virtual_env进行了编译

./configure --with-python = / home / andy / Dev / python / async-mongo / bin / python

我以root身份运行:

进行安装

我在http.conf中设置了WSGIPythonHome&Path

WSGIPythonHome /home/andy/dev/python/async-mongo/
WSGIPythonPath /home/andy/dev/python/async-mongo/lib/python2.6/site-packages
LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so

我想我遵循http://code.google.com/p/modwsgi/wiki/VirtualEnvironments上的说明

当我运行“Hello World”应用程序时,它可以工作

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]

当我尝试导入模块时失败

import sys; raise Exception(sys.path)
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)
    print >> sys.stderr, 'sys.prefix = %s' % repr(sys.prefix)
    print >> sys.stderr, 'sys.path = %s' % repr(sys.path)
    return [output]

我在apache日志中看到的错误是:

[Fri Mar 30 15:09:53 2012] [notice] Apache / 2.2.20(Ubuntu)mod_wsgi / 3.3配置Python / 2.6.7 - 恢复正常操作

........

例外:['/ home / andy / dev / python / async-mongo','/home/andy/dev/python/async-mongo/lib/python2.6/site-packages/setuptools-0.6c11-py2.6 .egg','/home/andy/dev/python/async-mongo/lib/python2.6/site-packages/pip-1.0.2-py2.6.egg','/ home / andy / dev / python /async-mongo/lib/python2.6/site-packages/txmongo-0.3-py2.6-linux-i686.egg','/home/andy/dev/python/async-mongo/lib/python2.6' ,'/home/andy/dev/python/async-mongo/lib/python2.6/plat-linux2','/home/andy/dev/python/async-mongo/lib/python2.6/lib-tk' ,'/home/andy/dev/python/async-mongo/lib/python2.6/lib-old','/home/andy/dev/python/async-mongo/lib/python2.6/lib-dynload' ,'/usr/lib/python2.6','/usr/lib/python2.6/plat-linux2','/usr/lib/python2.6/lib-tk','/ home / andy / dev /蟒蛇/异步 - 蒙戈/ lib目录/ python2.6的/站点包]

我猜在某处我仍然引用旧的系统级python,但我不明白在哪里。 我怎样才能解决这个问题?


你在这里提出一个例外:

import sys; raise Exception(sys.path)

摆弄sys.path的地方在your_application.wsgi。 我不认为编译指向virtualenv python二进制文件的mod_wsgi是一个好主意,virtualenv的重点是灵活性(例如,django的多个版本在同一台机器上播放不错)。

我对django,apache,wsgi和virtualenv的看法是这样的一个my_application.wsgi文件:

import os
import sys
import site

# Backup sys.path
prev_sys_path = list(sys.path)
# Add virtual environment to site directories:
site.addsitedir('/var/lib/python-environments/my_env/lib/python2.6/site-packages')

# settings.py sitting at /path/to/apps/my_application
os.environ['DJANGO_SETTINGS_MODULE'] = 'my_application.settings'
sys.path.append('/path/to/apps')

# start the trick
sys.path.extend([
   '/var/lib/python-environments/my_env/lib/python2.6/site-packages',
   '/var/lib/python-environments/my_env/lib/python2.6/site-packages/django/contrib/admindocs',
])
# Reorder syspath
new_sys_path = [p for p in sys.path if p not in prev_sys_path]
for item in new_sys_path:
    sys.path.remove(item)
# Make sure virtual env is first
sys.path[:0] = new_sys_path

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
链接地址: http://www.djcxy.com/p/55281.html

上一篇: wsgi and virtual env

下一篇: "ImportError: No module named selenium"