如何在 virtualenv 中使用不同版本的 Django

发布于 2024-10-18 06:39:00 字数 302 浏览 5 评论 0原文

我正在尝试在 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

染柒℉ 2024-10-25 06:39:00

你需要将 yolk 安装到 virtualenv 中,否则它会列出系统包; yolk 对当前的 virtualenv 一无所知。因此,在激活 virtualenv 的情况下运行 pip install yolk 。 (如果您创建的 virtualenv 没有 --no-site-packages,则需要运行 pip install --upgrade yolk)。

我刚刚重新创建了这个场景(除了 DebianPressure,其中 Django 的操作系统版本是 1.2.3)并且它有效。使用 --no-site-packages

% . foo/bin/activate
(foo)% yolk -l Django
Django          - 1.2.5        - active 
(foo)% deactivate

和不使用:

% . bar/bin/activate
(bar)% yolk -l Django
Django          - 1.2.3        - non-active development (/usr/lib/pymodules/python2.6)
Django          - 1.2.5        - active 

通常,如果您运行安装在 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 run pip 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:

% . foo/bin/activate
(foo)% yolk -l Django
Django          - 1.2.5        - active 
(foo)% deactivate

and without:

% . bar/bin/activate
(bar)% yolk -l Django
Django          - 1.2.3        - non-active development (/usr/lib/pymodules/python2.6)
Django          - 1.2.5        - active 

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).

瞎闹 2024-10-25 06:39:00

Virtualenv 更新 sys.path

在 vi​​rtualenv 内外运行它进行调试。

python -c "import sys; print '\n'.join(sys.path)"
python -c "import os; print os.getenv('PYTHONPATH')

尝试使用 --no-site-packages 创建 virtualenv 并查看是否仍然冲突。

Virtualenv updates sys.path

run this in and out of the virtualenv to debug.

python -c "import sys; print '\n'.join(sys.path)"
python -c "import os; print os.getenv('PYTHONPATH')

Try creating the virtualenv with --no-site-packages and see if it still conflicts.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文