2012-09-13 51 views
8

我現在主要使用Python 2.7和Django 1.3.3(託管在Heroku上)工作,我有多個我維護的項目。我一直在使用運行在VirtualBox內部的Ubuntu的桌面上工作,但最近不得不去旅行,並想把所有東西都加載到我的筆記本上。但是,我很快發現,virtualenv + Github對於創建項目非常簡單,但我努力嘗試將它們移到我的筆記本中。我想到的方法是創建新的virtualenv,然後從github克隆代碼。但是,我不能在我真正想要的文件夾中做它,因爲它會說該文件夾不是空的。所以,我會將它克隆到一個tmp文件夾,而不是將它剪切/粘貼到我真正想要的地方。不可怕,但我只是覺得我在這裏錯過了一些東西,它應該更容易。也許先克隆,然後mkvirtualenv?在計算機之間遷移virtualenv和Github

這不是一個蹩腳的問題,但我正在考慮做出一些更改(比如騎上VirtualBox,然後是雙引導系統),如果能讓它更平滑一些,那將是非常好的。 :)

最後,我發現和了解移動計算機之間的git回購幾個帖子,但我沒有看到任何處理VIRTUALENV(也許我只是錯過了)。

編輯:只是要清楚,避免混淆,我不會嘗試「移動」virtualenv。我只是在談論創建一個新的最佳方式。安裝軟件包,然後從github克隆repo。

+0

「但是,我無法在我真正想要的文件夾中做到這一點,因爲它會說文件夾不是空的。」 - 你是否將virtualenv作爲你的git倉庫?像in一樣,在同一個目錄中是'bin /'(帶'activate'的那個)和'.git'? – delnan

+0

是...... .git,bin,requirements.txt都在同一級別。 Bin沒有簽入回購。然後我有一個名爲「src」的文件夾在同一級別和下面,這是我的源被包含。 –

回答

1

有關的virtualenv的好處是,你可以描述如何使一個,你可以把它反覆在多個平臺上。

因此,而不是克隆整個事情,克隆一貫創建的virtualenv的方法,並有在你的git倉庫。這樣你就避免了特定平臺的問題。

+0

有趣......但請原諒我的無知,我不確定自己完全明白。你能提供更多的細節嗎?或者你能提供一個鏈接?感謝您的答覆。 –

+0

我認爲他的意思是:使用requirements.txt文件並創建一個運行[matt b answer](http://stackoverflow.com/a/12410239/1521064)的最後部分的shell腳本:'virtualenv'來創建, 'source'激活,'pip'安裝。 – vault

3

除了腳本創建一個新的virtualenv,你應該創建一個包含所有依賴關係(例如Django1.3)的requirements.txt文件,然後你可以運行pip install -r requirements.txt,這會爲你安裝所有的依賴關係。

你甚至可以有畫中畫做pip freeze > stable-req.txt這將打印出你的依賴,因爲在你當前的virtualenv創建這個給你。然後,您可以在版本控制下保留requirements.txt。

+0

感謝您的回覆。我明白那一部分。我想指出,使用全新的機器可能會有點困難,因爲您將繼續遇到需要構建的模塊(如psycopg2,django-pylibmc-sasl)的問題。但是,一旦你安裝了所有的「dev」文件,那麼從requirements.txt文件安裝絕對是一種方法。 –

+0

我看到這可以幫助您解決需要構建的模塊:http://blip.tv/djangocon/taming-dependencies-with-pip-5582996它值得一看手錶 – Ctrlspc

+0

@DavidS不能安裝那些與pip的依賴關係?我可以用'pip search'找到兩者。將它們放在'requirements.txt'中意味着新的開發/設置需要較少的工作。 –

9

那是因爲你甚至不應該virtualenvs移動到不同的位置在一個系統上(有搬遷的支持,但它的實驗性的),更不用說從一個系統到另一個。創建一個新的virtualenv:

  • 其他系統
  • 上安裝virtualenv中獲取一個requirements.txt,通過編寫一個或存儲pip freeze輸出(和編輯輸出)
  • 移動requirements.txt到另一個系統,創建一個新的virtualenv,並通過pip install -r requirements.txt安裝庫。
  • 克隆其他系統

在Git倉庫對於更高級的需求,您可以創建一個引導腳本,其中包括的virtualenv +自定義代碼來設置任何東西。

編輯:具有的virtualenv的根,並在同一目錄版本庫的根似乎是一個非常糟糕的主意給我。將存儲庫放入virtualenv根目錄中的一個目錄中,或將它們放入完全獨立的樹中。不僅可以避免git(通常,沒有被git跟蹤的所有內容都是公平的遊戲來刪除)抱怨現有文件,還可以將virtualenv用於多個存儲庫並避免名稱衝突。

+0

就像一個筆記,我沒有移動......我正在創建一個新的virtualenv。我將編輯原始問題以使其更清楚。 –

+0

另外...你對克隆有什麼作用?對我來說,git抱怨,因爲目標文件夾不是空的。似乎馬特B回答了這個問題,但你不知道。或者我錯過了什麼? –

+0

@DavidS通常你想在你的每個項目裏面,即在克隆的目錄中創建一個virtualenv *。這樣,您就可以在同一臺機器上爲多個項目分別製作獨立的virtualenvs。 –

14

如果你需要的唯一的工作流程是:

git clone repo_url somedir 
cd somedir 
virtualenv <name of environment directory> 
source <name of environment directory>/bin/activate 
pip install -r requirements.txt 

這假定您已經運行pip freeze > requirements.txt(而VENV被激活),列出所有的virtualenv個點的安裝庫,並檢查它變成回購。