如何在 virtualenv 中使用不同版本的 Django
我正在尝试在 virtualenv 中运行 Openblock,但问题是 Openblock 需要 Django 1.2.5,而我已经在服务器上安装了 Django 1.1.1。
$ python -c "import django;print django.get_version()"
返回 1.1.1
激活 virtualenv 后,相同的命令返回 1.2.5。到目前为止,一切都很好。
但是当我在 virtualenv 中运行 yolk -l 时,它显示 1.1.1 为活动状态,1.2.5 为非活动状态。
I'm trying to run Openblock within a virtualenv, but the problem is Openblock requires Django 1.2.5 and I've already got Django 1.1.1 on the server.
$ python -c "import django;print django.get_version()"
returns 1.1.1
After activating the virtualenv, the same command returns 1.2.5. So far so good.
But when I run yolk -l
within the virtualenv it shows 1.1.1 as active and 1.2.5 as non-active.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
你需要将 yolk 安装到 virtualenv 中,否则它会列出系统包; yolk 对当前的 virtualenv 一无所知。因此,在激活 virtualenv 的情况下运行
pip install yolk
。 (如果您创建的 virtualenv 没有--no-site-packages
,则需要运行pip install --upgrade yolk
)。我刚刚重新创建了这个场景(除了 DebianPressure,其中 Django 的操作系统版本是 1.2.3)并且它有效。使用
--no-site-packages
:和不使用:
通常,如果您运行安装在 virtualenv 外部的任何 Python 程序,您不应该期望它们了解有关 virtualenv 的任何信息,除非它们已经被编写以了解 virtualenv(例如 pip 的
PIP_RESPECT_VIRTUALENV
)。You need to install yolk into the virtualenv otherwise it'll list system packages instead; yolk doesn't know anything about the current virtualenv. So run
pip install yolk
with the virtualenv activated. (If you've created your virtualenv without--no-site-packages
, you'll need to runpip install --upgrade yolk
).I just recreated this scenario (except with Debian squeeze where the OS version of Django is 1.2.3) and it worked. With
--no-site-packages
:and without:
In general, if you run any Python programs installed outside the virtualenv, you shouldn't expect them to know anything about the virtualenv unless they've been written to be aware of virtualenv (e.g. pip's
PIP_RESPECT_VIRTUALENV
).Virtualenv 更新 sys.path
在 virtualenv 内外运行它进行调试。
尝试使用 --no-site-packages 创建 virtualenv 并查看是否仍然冲突。
Virtualenv updates sys.path
run this in and out of the virtualenv to debug.
Try creating the virtualenv with --no-site-packages and see if it still conflicts.