在 Visual Studio Code 中配置 Python Flask 環境
本文由 赤石俊哉 原創編寫,您可以在學習交流用途以內自由使用文章。
但是禁止抄襲文章,轉載時,請註明來源地址,謝謝。
最後更新時間: 2017年11月24日 17:53:15更多文章可以參見 小赤石的Code Space
0. 準備階段
本文預設您已經完成了以下工作的情況:
1. 安裝完成了 Visual Studio Code。
2. 安裝完成了 Python 3.6.3 並且將 Python 新增到系統變數 PATH 中。
1. 在 vscode 中安裝 python 語言支援
執行 vscode,按下 Ctrl
+ P
,會開啟一個輸入框,輸入 ext install python
,就會進入擴充套件商店,搜尋 python
。
我們需要的是發行者為 Microsoft
的那一個名為 Python
的擴充套件。點選 安裝
按鈕,安裝完成之後,點選 重新載入
。
2. 使用 pip 安裝 virtualenv、pylint、yapf
下面是各個包的簡單說明,如果您足夠了解的話,可以直接跳轉到 安裝過程
小節。
virtualenv
在開發 Python 應用程式的時候,系統安裝的 Python3 只有一個版本:3.4。所有第三方的包都會被
pip
安裝到Python3的site-packages
目錄下。
如果我們要同時開發多個應用程式,那這些應用程式都會共用一個 Python,就是安裝在系統的 Python 3。
如果應用 A 需要 jinja 2.7,而應用 B 需要 jinja 2.6 怎麼辦?
這種情況下,每個應用可能需要各自擁有一套“獨立”的 Python 執行環境。virtualenv
就是用來為一個應用建立一套“隔離”的 Python 執行環境。
pylint
摘自:如何使用 Pylint 來規範 Python 程式碼風格
Pylint 是一個 Python 程式碼分析工具,它分析 Python 程式碼中的錯誤,查詢不符合程式碼風格標準(Pylint 預設使用的程式碼風格是 PEP 8,具體資訊,請參閱參考資料)和有潛在問題的程式碼。
簡單的來說,Pylint 為我們提供了糾錯的功能,如果你希望在你的程式碼中,及時發現標註波浪線的錯誤,請安裝它。
yapf
摘自:有哪些命令列的軟體堪稱神器? – int32bit的回答 – 知乎
Google開發的python程式碼格式規範化工具,支援pep8以及Google程式碼風格。
簡單的說, yapf 為我們提供了格式化程式碼的功能,如果你希望在你的程式碼中,使用 Alt
+ Shfit
+ F
來自動格式化你的 Python 程式碼,請安裝它。
安裝過程
使用下面的命令依次安裝他們:
pip install virtualenv
pip install pylint
pip install yapf
安裝中可能出現的問題
下面總結一下,筆者在安裝中出現過的問題,以及解決方法。
UnicodeEncodeError `utf-8` codec can`t encode character…
這個也是一個比較常見的問題,遇到這個問題時,可以參考錯誤中的倒數第三行中的路徑:
...
File "c:usersxxxappdatalocalprogramspythonpython36-32libsite-packagespipcompat\__init__.py", line 75, in console_to_str
return s.decode(`utf_8`)
UnicodeDecodeError: `utf-8` codec can`t decode byte 0xc1 in position 55: invalid start byte
比如,上面的錯誤中,我們開啟c:usersxxxappdatalocalprogramspythonpython36-32libsite-packagespipcompat\__init__.py
這個檔案,定位到 第 75 行。
將 return s.decode(`utf_8`)
改為 return s.decode(`cp936`)
如上操作可能需要管理員許可權,建議使用 Windows
+ X
使用管理員許可權的命令提示符或者管理員許可權的 PowerShell。
然後輸入 code c:usersxxxappdatalocalprogramspythonpython36-32libsite-packagespipcompat\__init__.py
改成對應你的檔名。
3. 修改 vscode 中的設定
開啟 vscode,進入 檔案 > 首選項 > 設定,按照下面的註釋修改對應的值。
// 如果使用 pylint, 設定下面的為 true。如果使用其他語法糾錯的庫,可以將對應的設定為 true,其他的設定為 false。
"python.linting.pylintEnabled": true
// 如果安裝了 yapf,並且希望使用 yapf 格式化程式碼的,請修改下面的選項。
"python.formatting.provider": "yapf"
4. 使用 virtualenv 建立工程目錄
為每一個 Python 專案配置一個獨立的環境和目錄,是一個比較好的想法,這樣你可以根據需要安裝不同的庫以及版本。
這一小節,將使用 virtualenv 建立一個虛擬環境,並且安裝 flask。
首先,我們先啟動一個具有管理員許可權的 PowerShell。(你也可以使用 CMD)
假設我們需要將專案放在 D:pydemo
這個資料夾內。
建立資料夾並配置虛擬環境
PS D:> mkdir pydemo
PS D:> cd pydemo
PS D:pydemo> virtualenv --no-site-packages .venv
Using base prefix `c:\program files\python36`
New python executable in D:pydemo.venvScriptspython.exe
Installing setuptools, pip, wheel...done.
PS D:pydemo>
如果出現上面的提示,就說明安裝已經完成了,接下來我們要將 PowerShell 的環境切換到這個虛擬環境中。
在 PowerShell 中:
PS D:pydemo> ./.venv/Scripts/activate.ps1
(.venv) PS D:pydemo>
如果提示錯誤,可以嘗試使用下面的方法解決
(.venv) PS D:pydemo> Set-ExecutionPolicy RemoteSigned
執行策略更改
執行策略可幫助你防止執行不信任的指令碼。更改執行策略可能會產生安全風險,如 http://go.microsoft.com/fwlink/?LinkID=135170
中的 about_Execution_Policies 幫助主題所述。是否要更改執行策略?
[Y] 是(Y) [A] 全是(A) [N] 否(N) [L] 全否(L) [S] 暫停(S) [?] 幫助 (預設值為“N”): Y
如果你使用的是 CMD,則使用下面的命令:
D:pydemo> ./.venv/Scripts/activate.bat
(.venv) D:pydemo>
往虛擬環境中安裝包
如果你的命令列,或者 PowerShell 已經變成了
(.venv) PS D:pydemo>
前面有一個括號,表示的是你最開始建立的虛擬環境的位置,那麼這就說明你已經把上下文的環境切換到了虛擬環境裡面。
我們在這裡面安裝的 pip 就不會放到公共的 site-packages 裡面了。
執行下面的命令安裝 flask 和 watchdog(如果又出現 UnicodeEncodeError,參考上一節所描述的解決方案,修改虛擬環境中的 __init__.py
。)
(.venv) PS D:pydemo> pip install flask
Collecting flask
Using cached Flask-0.12.2-py2.py3-none-any.whl
Collecting Jinja2>=2.4 (from flask)
Using cached Jinja2-2.10-py2.py3-none-any.whl
Collecting Werkzeug>=0.7 (from flask)
Using cached Werkzeug-0.12.2-py2.py3-none-any.whl
Collecting click>=2.0 (from flask)
Using cached click-6.7-py2.py3-none-any.whl
Collecting itsdangerous>=0.21 (from flask)
Collecting MarkupSafe>=0.23 (from Jinja2>=2.4->flask)
Installing collected packages: MarkupSafe, Jinja2, Werkzeug, click, itsdangerous, flask
Successfully installed Jinja2-2.10 MarkupSafe-1.0 Werkzeug-0.12.2 click-6.7 flask-0.12.2 itsdangerous-0.24
(.venv) PS D:pydemo> pip install watchdog
Collecting watchdog
Collecting argh>=0.24.1 (from watchdog)
Using cached argh-0.26.2-py2.py3-none-any.whl
Collecting PyYAML>=3.10 (from watchdog)
Collecting pathtools>=0.1.1 (from watchdog)
Installing collected packages: argh, PyYAML, pathtools, watchdog
Successfully installed PyYAML-3.12 argh-0.26.2 pathtools-0.1.2 watchdog-0.8.3
(.venv) PS D:pydemo>
安裝完成之後,我們可以從 PowerShell 中直接執行 vscode 並且將工作目錄設定為當前目錄(也就是D:pydemo
)。
(.venv) PS D:pydemo> code .
5. 修改 launch.json
開啟 vscode 之後,使用 Ctrl
+ Shift
+ D
,或者點選側邊欄的除錯選項,調出除錯選項側邊欄。
然後點選齒輪 配置或修復 “launch.json”,自動生成一個 launch.json
。
如果出現選擇環境,我們選擇 Python
。
在 configurations 中,我們僅保留 "name": "Python: Flask (0.11.x or later)"
這一段。其他的全部刪掉。
將這一段配置中的下面幾個選項重新配置一下:
// 將 Python 指定為虛擬環境中的 Python
"pythonPath": "${workspaceRoot}/.venv/Scripts/python.exe"
// 將 program 和 env.FLASK_APP 都設定為你這個專案的入口檔案。
"program": "${workspaceRoot}/main.py"
"env": {
"FLASK_APP": "${workspaceRoot}/main.py"
}
配置完之後,應該是這樣的:
{
"version": "0.2.0",
"configurations": [
{
"name": "Python: Flask (0.11.x or later)",
"type": "python",
"request": "launch",
"stopOnEntry": false,
"pythonPath": "${workspaceRoot}/.venv/Scripts/python.exe",
"program": "${workspaceRoot}/main.py",
"cwd": "${workspaceRoot}",
"env": {
"FLASK_APP": "${workspaceRoot}/main.py"
},
"args": [
"run",
"--no-debugger",
"--no-reload"
],
"envFile": "${workspaceRoot}/.env",
"debugOptions": [
"WaitOnAbnormalExit",
"WaitOnNormalExit",
"RedirectOutput"
]
}
]
}
儲存並關閉。
6. 建立測試程式碼並執行測試
使用 Ctrl
+ Shift
+ E
或者點選左側邊欄的檔案,回到檔案側邊欄。
在 pydemo 中,我們新建一個檔案,名為main.py
。如果你上面的配置指定的是其他檔名,可以修改成你自己指定的。
並加入下面的程式碼:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
if __name__ == `__main__`:
app.debug = False
app.run(host=`localhost`, port=5000)
這裡必須將 app.debug
設定為 False
,否則會出現一直Restarting
。
按下 F5
執行程式碼,將會在 除錯控制檯 中看到:
* Running on http://localhost:5000/ (Press CTRL+C to quit)
這個時候,我們可以通過瀏覽器訪問http://localhost:5000/
,會有 Hello World!
顯示。
到此,我們的環境配置就完成了。