2016-03-11 122 views
7

我有一個困境,建立一個當地的發展項目結構。這裏是我的設置:Django和'virtualenv' - 正確的項目結構

  • 的Python 2.7
  • 的Django 1.9
  • 的Mac OSX埃爾卡皮坦10.11
  • 的MySQL 5.7

我做了一個 「錯誤」 設置我的項目在全球範圍,而不是在虛擬環境中(使用'pip'在/>中安裝所有內容)。在閱讀this article後,我仍然沒有得到所有的步驟。 這是正確的:

  1. 我安裝全球蟒蛇(PIP,virtualenv中在'/>'
  2. 然後我走到哪裏我的項目將駐留的位置,像/users/user/documents/projects/project1從內部「PROJECT1」我用「的virtualenv」創建虛擬環境,爲這個項目(這將創建一個文件夾/virtual env//project1/文件夾中)
  3. 激活這個虛擬環境和pip install django
  4. 日途中從內新創建了/virtual env/文件夾
  5. 在當前shell會話仍在運行在虛擬環境中創建另一個/project1/文件夾/virtual env/夾我startproject,我着手創建我的劇本,網站和應用程序文件

廣告2. virtualenv文件夾應該位於主「project1」文件夾中還是應包含它?

廣告4.這是正確的,還是我可以做到這一點,而不先激活虛擬環境?

我目前的結構看起來像這樣(從根開始:/users/myUser/documents/projects/):

/project1/ 
    /website1/ 
     /static/ 
     /templates/ 
     __init.py__ 
     settings.py 
     urls.py 
     views.py 
     wsgi.py 

回答

8

它並不真正無論你在哪裏存儲您的虛擬環境。找到一個適合你的項目結構。

我不會把虛擬env放到項目中,因爲你不應該把它檢入到版本控制中(雖然你可以使用忽略)。通常情況下,您只需檢查需求文件,以便重新創建環境。

我不會把項目放在虛擬環境中,因爲虛擬環境是一次性的。您可能希望銷燬虛擬env而不銷燬該項目。另外,您可能想要在不同的虛擬環境下運行相同的項目,例如在升級之前在Django 1.8和1.9上測試你的代碼。

您可能會發現virtualenvwrapper有用。它有一些工具,可以很容易地在虛擬環境之間創建和切換。它將所有的虛擬環境存儲在一個地方,所以你不必擔心在哪裏放置它們。

這是正確的,還是我可以做到這一點,而不先激活虛擬環境?

你應該激活虛擬環境,並創建你的項目/工作之前安裝Django。

+0

謝謝阿拉斯代爾!所以如果我正確地讀了你的話:項目文件夾結構和虛擬env文件夾結構應該基本上是兩個完全分開的東西?我可以在'C:'上創建virtualenv,2.激活它,3.將目錄切換到'D:',4.在virtualenv激活的情況下,開始在'D:'上創建我的項目文件夾結構並繼續研究它? –

+1

是的。關鍵是你在創建/處理項目之前激活虛擬環境。他們不必在同一個地方。 – Alasdair

7

常見的解決方案是將虛擬環境和項目保存在不同的文件夾中,例如對於虛擬環境有/users/myUser/.venvs,對於項目有/users/myUser/documents/projects/。在其他方面,你自己也很合適。所以:

  1. 您需要安裝全局Python和virtualenv。
  2. 爲虛擬環境創建導向,例如運行mkdir /users/myUser/.venvs
  3. 爲您的項目創建虛擬環境,virtualenv /users/myUser/.venvs/project1_venv
  4. 激活當前shell會話的環境/users/myUser/.venvs/project1_venv/bin/activate
  5. 安裝Django和其他任何在這種環境pip install django,或更好地利用requirements.txt文件跟蹤所有項目的依賴。
  6. 取消激活環境,運行deactivate

現在,當你想運行使用創建的虛擬環境項目,在控制檯窗口中運行/users/myUser/.venvs/project1_venv/bin/activate然後python /users/myUser/documents/projects/project1/manage.py runserver。您可以從任何目錄激活venv,激活當前shell窗口並在激活後使用該虛擬環境在該窗口中運行任何python ...。激活腳本以某種方式修改環境變量,以便使用來自venv的解釋器和庫而不是全局變量。 (雖然也有使用全球的選項。)

+0

我想接受這個答覆,因爲它更加詳細和新穎友好,但上面的速度更快,它使我自己「連接點」。我不知道這是什麼禮節? –

+1

@AlexStarbuck,您必須研究[StackOverflow Meta](http://meta.stackoverflow.com/)才能自行找到答案。但總的來說,所有答案都留在這裏,標記一個答案背後的想法 - 最符合您的問題的答案是,其他遇到類似問題的人可以更快地找到解決方案。所以一般來說,這不是「最快」的答案,而是最「有用」的答案。無論如何,我很高興能夠提供幫助。 – Nikita