我对 virtualenvs 和 django 有疑问。显然我只是不明白他们应该如何工作。
我在 /opt/bin/python 中安装了 python 2.7.3 ucs2,它工作得很好我安装了 virtualenv 和 virtualenvwrapper 并创建了名为 py273ucs2 的虚拟环境,所以当我输入 workon py273ucs2 时,我得到了正确的虚拟环境。
当我创建python脚本时
#!/home/alan/python/virtualenvs/py273ucs2/bin/python
import sys
print sys.maxunicode
我得到 65535,这对于 ucs2 python 是正确的。
同时我不知道如何为我的 django 应用程序使用正确的虚拟环境,所以我可以使用 ucs2 python 而不是 ucs4 之一。我尝试使用 virtualenvwrapper.django 创建一个测试项目,认为它的 wsgi 文件或 manage.py 会给我关于如何在正确的环境下启动 wsgi 脚本的提示——没有这样的运气。
我找到了这个网站: http: //www.saltycrane.com/blog/2009/05/notes-using-pip-and-virtualenv-django/
基本上(除了我已经做过的其他事情)告诉我将其添加到我的 wsgi 文件中:
site.addsitedir('/srv/python-environments/saltycrane/lib/python2.5/site-packages')
在我的情况下是:
site.addsitedir('/home/alan/python/virtualenvs/py273ucs2/lib/python2.7/site-packages')
试过 - 没有运气。然后有这样的页面: http ://www.gyford.com/phil/writing/2011/06/27/virtualenv-webfaction.php 除了最后一页,它建议我添加:
activate_this = os.path.expanduser("~/.virtualenvs/my_env_name/bin/activate_this.py")
execfile(activate_this, dict(__file__=activate_this))
在我的情况下是:
activate_this = os.path.expanduser("/home/alan/python/virtualenvs/py273ucs2/bin/activate_this.py")
execfile(activate_this, dict(__file__=activate_this))
再次没有运气..查看
def base(request):
return HttpResponse(sys.version+' maxunicode ' +str(sys.maxunicode))
打印出 python 版本 2.7.2 和 maxunicode 1114111 而不是 65535。
然后在stackoverflow这里有这条消息: django如何与virtualenv一起工作? 这表明我在 httd.conf 中添加了参数-也尝试过但也不起作用。
老实说-我没有得到这个。也许版本应该保持 2.7.2 而不是 2.7.3 ......那么 virtualenvs 的意义是什么......或者我做错了什么并且没有从这些例子中得到什么。我还检查了有关 virtualevns 的 wsgi wiki:
http://code.google.com/p/modwsgi/wiki/VirtualEnvironments
并将我的 httpd.conf 修改为:
WSGIPythonHome /home/alan/python/virtualenvs/py273ucs2
WSGIPythonPath /home/alan/python/virtualenvs/py273ucs2/lib/python2.7/site-packages
WSGIDaemonProcess printer user=alan group=alan processes=5 threads=5 python-path=/home/alan/python/virtualenvs/py273ucs2/lib/python2.7/site-packages
WSGIProcessGroup printer
WSGIScriptAlias / /home/alan/projects/printer/printer.wsgi
没有。仍然在视图中看到 python 2.7.2...
有人可以帮我吗:)
艾伦
编辑1:回答评论:
1) 如果我想使用虚拟环境,我必须安装/编译新的 mod_wsgi?为什么?
2)如果我这样做:
alan@alan:~$ workon py273ucs2
(py273ucs2)alan@alan:~$ cd projects/printer/
(py273ucs2)alan@alan:~/projects/printer$ python manage.py runserver
Validating models...
0 errors found
Django version 1.3, using settings 'printer.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
[08/Jul/2012 05:01:00] "GET / HTTP/1.1" 200 68
然后我的观点告诉我:
2.7.3(默认,2012 年 5 月 16 日,10:58:59)[GCC 4.6.1] maxunicode 65535
Edit2:感谢 modwsgi google group 的 Graham Dumpleton 的帮助,我设法为 ucs2 python ( https://groups.google.com/forum/?fromgroups#!topic/modwsgi/F5Wn4uWrQAg ) 安装了 mod_wsgi。
但是当我开始这个网站时,我仍然得到
2.7.2+(默认,2011 年 10 月 4 日,20:41:12)[GCC 4.6.1] maxunicode 1114111
不是
2.7.3(默认,2012 年 7 月 9 日,13:32:29)[GCC 4.6.1] maxunicode 65535
顺便说一句 apache 错误日志打印出这个:
[2012 年 7 月 9 日星期一 14:13:19] [警告] mod_wsgi:为 Python/2.7.3 编译。[2012 年 7 月 9 日星期一 14:13:19] [警告] mod_wsgi:运行时使用 Python/2.7.2+。
最终编辑:
mod_wsgi 的安装方式存在几个问题。当您点击此链接时,您可以找到所有必要的信息:https ://groups.google.com/forum/?fromgroups#!topic/modwsgi/F5Wn4uWrQAg 。
但在这些问题之后,重点是 Ubuntu python 安装的方式与其他 python 冲突(可能不是最好的解释,但如果你点击上面的链接,你会发现 Graham Dumpleton 的解释很好)。当我删除 libapache2-mod-python 包时,虚拟 python 和 mod_wsgi 开始工作。它引起了其他问题,但这些问题是由 ubuntu 及其 python 包的设置方式引起的。
因此,如果您是 ubuntu 用户并且碰巧发现了同样的问题,那么这个页面和 Graham Dupmpletons 的巨大努力可能也会对您有所帮助。