2011-09-15 28 views
78

我在virtualenv中有一個現有的環境,有很多包,但是是一箇舊的Django版本。Duplicate virtualenv

如果我想複製這種環境下,
所以我可以有另一種環境,使我可以安裝一個新的Django版本,
但保留了那些已經在其他環境中的所有包?

+3

我想點子凍結您的所有需求變成了「requirements.txt」文件並創建另一個的virtualenv和運行PIP安裝requirements.txt –

+0

如果虛擬的Python版本你想複製的環境與默認的python環境不同,你可以將新環境設置爲'virtualenv -p/path/to/older/venv/bin/python new_venv',然後使用你的'requirements.txt' 'pip freeze'後生成# – GiriB

回答

116

最簡單的方法是使用pip生成需求文件。需求文件基本上是一個文件,其中包含您要安裝的所有python軟件包的列表(或者在文件由pip生成的情況下已經安裝),以及它們的版本。

要生成一個需求文件,進入你原來的virtualenv,然後運行:

pip freeze > requirements.txt 

這將產生requirements.txt文件給你。如果你在你最喜歡的文本編輯器打開這個文件,你會看到類似這樣的:

Django==1.3 
Fabric==1.0.1 
etc... 

現在,編輯說:Django==x.x行說Django==1.3(或者你想在新的virtualenv安裝任何版本) 。

最後,激活您的的virtualenv,然後運行:

pip install -r requirements.txt 

和PIP會自動下載並安裝所有在requirements.txt文件中列出的Python模塊,在任何版本的指定!

+1

謝謝!雖然使用谷歌搜索,我發現這麼多嘈雜,雜亂和混亂的頁面...您的解決方案是如此乾淨和簡單...它使我的一天;) – dolma33

+0

如果我複製文件夾,然後將其粘貼到另一臺機器?它會工作嗎?當然,假設apt-get依賴關係已解決 –

+0

將無法​​正常工作=) – rdegges

2

你能不能簡單地說:

  • 複製現有的虛擬目錄ENV到一個新的
  • 更新到新的Django的?
+5

有些時候我使用這種方法,但是不得不更新bin/activate腳本中的一些路徑。 –

+3

該變化是簡單的找到並替換對env名稱的引用,還是比它更復雜? – Greg

+1

在我的情況下,只是更新bin/activate中VIRTUAL_ENV常量的路徑做了訣竅 – bryanph

17

另一種選擇是使用virtualenv-clone包:

用於克隆的非可重定位的virtualenv的腳本。

+0

嗨,我是否有權假設這允許我將整個Python環境複製到文件中。然後,我只需要在新的計算機/操作系統中加載此文件,並且我會將所有網站包安裝回 – aceminer

8

virtualenvwrapper提供command to duplicate virtualenv

cpvirtualenv ENVNAME [TARGETENVNAME] 
+0

不是一個好主意。 「複製虛擬環境得不到很好的支持,每個virtualenv都有硬編碼的路徑信息,並且在某些情況下複製代碼不知道它需要更新一個特定的文件,請謹慎使用。 – Temak