2016-03-02 134 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