1

我对 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 的巨大努力可能也会对您有所帮助。

4

2 回答 2

0

您无法安装尚未安装的 python 版本的 virtualenv。

virtualenv 的重点是隔离你的包。如果您使用--no-site-packages. 它不会使用系统上已经安装的软件包。换句话说,这意味着您可以为一个 pythone 二进制文件安装每个包的多个版本。

拥有 virtualenv 也使开发变得更容易,因为您不需要 root 访问权限来使用python setup.pyor安装包pip install

从您发布的内容中不清楚,为什么它不起作用。

激活一个virtualenv。你所要做的

source path/to/env/bin/activate

从配置运行脚本时,指出 python 所在的位置就足够了。如果你做 add_site_package,它可能只是默认添加到 python 而不是你想要的。

如果没有任何效果,您也许可以这样做。如果不需要其他 python 可执行文件,它应该可以解决您的问题。

使用which python,您应该能够知道当前 python 可执行文件的位置。

您可以将默认 python 的符号链接替换为您的 python2.7.3ucs。但我不能保证它不会在某个地方破坏某些东西。由于某些程序可能依赖于特定的 python2.7.2

编辑

显然,您的问题绝对不在于 virtualenv。但是使用 mod_wsgi。这是一个描述如何为所需的 python 版本编译 mod_wsgi 的站点。

http://technomilk.wordpress.com/2011/08/10/running-our-django-site-with-mod_wsgi-and-virtualenv-part-2/

这一行:

$ ./configure --with-python=/home/isigma/.pythonbrew/pythons/Python-2.7.2/bin/python

这是您放置 python 版本的路径,然后按照步骤操作的地方。希望它会像黄油一样起作用。

编辑 2

如果没有其他工作,这可能意味着您必须检查 mod_wsgi 的替代品。

这是一个很好的。

http://projects.unbit.it/uwsgi/wiki/Example

编辑 3

像这样创建一个新的virtualenv

virtualenv --no-site-packages --python=/opt/bin/python
于 2012-07-08T09:34:35.370 回答
0

副本:

https://groups.google.com/forum/?fromgroups#!topic/modwsgi/F5Wn4uWrQAg

问题记录在:

http://code.google.com/p/modwsgi/wiki/InstallationIssues#Mixing_32_Bit_And_64_Bit_Packages

配置/安装 Python 时使用“--enable-shared”。

于 2012-07-08T23:37:24.660 回答