在使用 python 製做網頁的過程當中,咱們每每須要先將站點的目錄「虛擬化」。虛擬化其實就是將當前文件下程序的運行環境與整個系統的環境隔離。那麼爲何咱們要將一個項目虛擬化呢?html
在平時使用 python 時,有可能會遇到這幾個常見的問題:python
1.當運行的項目處於不一樣版本時(如 python 2.7/3.7 ),要經過切換 python 解釋器的版原本運行程序(或要使用 python2/3
pip/pip3
等指令來對應不一樣的版本)。bash
2.有時作一個項目要用到許多第三方模塊,可是其餘項目基本不會用。若是直接 pip install
到系統中,項目刪除後清除安裝過的模塊會很麻煩。編輯器
3.作完一個項目後,你但願可以再也不一次安裝它依賴的模塊,就能在另一個系統上直接運行。code
4.你的項目暫時運行在一箇舊版的第三方模塊上,而新版的第三方模塊不兼容你所寫的程序。你既但願可以讓原來的項目在舊版本上繼續正常運行,又但願可以在另外一個項目中使用新版本。htm
若是你遇到過上面這四個問題,而且但願可以改善這一些繁瑣的配置過程,那麼你就能夠嘗試對你的項目進行「虛擬化」。ip
python 自帶了一個很是簡便的虛擬化模塊 - venv 。在 python 3.5 及以前的版本,建立一個虛擬化項目的指令爲:文檔
$ python -m venv <directory>
而在 3.6 以後的版本中,指令變成了get
$ python3 -m venv <directory>
其中在 3.4 及以前的版本中,初始化一個環境是不會自帶 pip 的。而在 3.4 以後,能夠添加 --without-pip
這個參數來去掉 pip 包。cmd
固然,venv還有 --copies
參數,它就能夠在建立時把系統已有的模塊複製進去。不過通常這個不經常使用。(由於系統裏裝的模塊可能已經不少了)若是真的要使用系統中的模塊,請參考第四小節的設置。
成功建立了虛擬化的環境以後,咱們須要先進入這個環境(否則 pip 仍是會裝在系統中)。咱們可使用如下指令來進入環境。其中 <venv>
是你項目文件夾的路徑。
MacOS 或 Linux
bash/zsh $ source <venv>/bin/activate
fish $ . <venv>/bin/activate.fish
csh/tcsh $ source <venv>/bin/activate.csh
Windows
cmd.exe C:\> <venv>\Scripts\activate.bat
PowerShell PS C:\> <venv>\Scripts\Activate.ps1
cometeme$ source /Users/cometeme/Documents/example/bin/activate (example)cometeme$
能夠看到前面多了一個(example)的提示,說明咱們已經進入到虛擬環境中了。在虛擬環境裏,咱們能夠像正常同樣操做裏面的文件,或是安裝第三方模塊,只不過這一些都只會影響到本地的內容了。
當咱們想要退出虛擬環境時,咱們能夠輸入 deactivate
這個指令來退出。
在虛擬環境的根目錄下,咱們能夠看到一個叫 pyvenv.cfg
的文件。用文本編輯器打開後能夠看到這幾行內容:
home = /Library/Frameworks/Python.framework/Versions/3.7/bin include-system-site-packages = false version = 3.7.0
其中, home
指的是系統中 python 模塊的安裝位置。除非你自定義過了,否則這個默認值就是對的。
include-system-site-packages
這個參數能夠設置是否開啓「引用系統中的模塊」的功能。若是開啓了,那麼當你就能夠直接使用系統中已經裝過的第三方模塊。(可是你在虛擬環境下裝的模塊就不能被其餘地方的程序使用)
version
能夠指定 python 的版本,前提是你必需要安裝這個版本。(好比你只裝了 python3.6 ,那麼你設置成 2.7 就會出錯)
大約一千多字, venv 的這個模塊的一些簡單使用方法就已經介紹完了,簡潔卻又方便,這一直是 python 的特性。其實除了能夠在控制檯中使用外,它還能夠做爲一個模塊在程序中使用。不過通常狀況下咱們只須要用控制檯就能夠了。若是你們還想深刻研究,能夠查看 29.3. venv — Creation of virtual environments 。