2016-03-02 145 views
6

我有一个服务器运行几个不同的Django网站,运行不同版本的Django。昨天,Django issued security updates for 1.8 and 1.9。这意味着,为了保证一切安全,我必须去每个网站并更新它正在运行的Django版本。由于Django在版本控制方面做得非常好(例如,在次要版本之间发生变化,比如1.8-1.9,但不是在版本之间发生变化,比如1.9.2-1.9.4),似乎我应该能够有一个中央的Django安装每个小版本,1.7,1.8,1.9等VirtualEnv集中Django安装

有没有办法让VirtualEnv针对特定的安装,以便我可以让所有的网站运行Django 1.8点只需一个安装,同样是1.9?

回答

2

一个解决方案是使用virtualenvwrapper的add2virtualenv

只需创建用于共享的Django版本一些virtualenvs(当然,一个的virtualenv一个django的主要版本),并在每个virtualenvs的调用命令:

add2virtualenv /path/to/shared/virtualenv/lib/python3.4/site-packages 

替换到共享的virtualenv(和python版本,如果路径必要的)与你想使用的一个。

add2virtualenv具有永久效果,所以在激活virtualenvwrapper之后不需要再次调用它。

+0

virtualenvwrapper之外的功能是否可用?就像在做什么,virtualenv可以提供什么? – tghw

+0

是的,它可以完成,virtualenvwrapper只是在virtualenv的site-packages目录下创建'_virtualenv_path_extensions.pth'文件,即将指定的目录添加到'sys.path'中。通过分析它在virtualenvwrapper中的完成方式,你将能够重新创建它。但使用virtualenvwrapper会更容易。 – GwynBleidD

+0

像魅力一样工作,谢谢! – tghw

1

可能会采取的一种方法是从site-packages目录的symlink django。虽然这似乎各种粗略。

至于我自己?我只是安装SaltStack,因为你可以manage virtualenvs with it

+0

我尝试了一次符号链接解决方案,这是一个坏主意,因为您需要手动搜索其他依赖关系。对我来说有效的是virtualenvwrapper,它具有virtualenv缺乏的一些功能。在这种情况下,我可以有两个virtualenvs(Django 1.8,Django 1.9,由virutalenv管理依赖项),并为每个项目创建新的virtualenvs,并根据需要链接到Django 1.8或Django 1.9 virtualenv。特别看看add2virtualenv命令:http://virtualenvwrapper.readthedocs.org/en/latest/command_ref.html#add2virtualenv –

+0

@DRubio如果您尝试重新安装特定的verson,那么pip不会选择依赖关系吗? –

+0

@WayneWerner如果符号链接Django,那么你也需要符号链接所有的Django的依赖关系。 Pip将无法知道并非所有的符号链接都已制作完成。 – tghw

-2

难道这不是什么requirements.txt的目的?你可以指定Django的版本为“> = 1.8,< 1.9”,那么你知道升级总是会安装最新的1.8版本的bugfix,但从来没有1.9版本。

+0

这不是问题所在。现在,我有X个站点去做一个PIP安装-U“django> = 1.8,<1.9”。问题是如何制作一个所有X站点都使用的集中式Django 1.8安装程序。 – tghw