在 Windows 上怎樣做 Python 開發?是像大神那樣使用純文字編輯器,還是用更加完善的 IDE?到底是用自帶的指令行工具,還是需要裝新的 Terminal?本文将帶你了解如何利用微軟官方維護的 MS Terminal 與 VS Code,來為 Python 開發保駕護航。
使用 Windows 系統一大好處是它的應用太豐富了,甚至強大的 GPU 也能在閑暇時間做點其它「工作」。然而與 Linux 或 macOS 不同,在 Windows 上做開發總會遇到很多挑戰,不論是檔案編碼、環境控制還是項目編譯,開發過程中總會有一些神奇的收獲。
這些對于初學者來說尤其突出:我們在安裝某個庫時可能出現各種依賴項錯誤,我們在讀寫文本時出現各種編碼錯誤等等。
那麼在 Windows 上如何做 Python 開發呢?相信大神們都會有自己的解決方案,但本文希望介紹微軟官方釋出的 Terminal 和 Visual Studio Code,希望它們能建構更流暢的 Windows 開發體驗。
Visual Studio Code 是程式員可以使用的最酷的代碼編輯器之一,是一個可在所有平台上使用的開源、可擴充和輕量級編輯器。正是這些品質使微軟的 VS Code 大受歡迎,并成為 Python 開發的絕佳平台。可能很多讀者都比較熟悉 PyCharm 與 Jupyter Notebook 等常見的 Python IDE,但 VS Code 一樣不會令你失望。
在本文中,你将學習到微軟 Terminal 和 Visual Studio Code 的特性,包括:
- 什麼是微軟 Terminal
- 微軟 Terminal 效果怎麼樣
- 安裝 Visual Studio Code
- 發現并安裝 Python 擴充
- 編寫簡單的 Python 應用程式
了解如何在 VS Code 中運作和調試現有 Python 程式
- 将 VS Code 連接配接到 Git 和 GitHub,與全世界分享你的代碼
我們假設你了解 Python 開發,并且已經在系統上安裝了某種版本的 Python(如 Python 2.7、Python 3.6/3.7、Anaconda 或其他)。由于 VS Code 可相容所有主流平台,是以你可能會看到略有不同的 UI 元素,并且可能需要修改某些指令。
新興的微軟 Terminal
Windows Terminal 是一個開源終端應用程式,由微軟在今年 5 月份的 Build 開發者大會上推出。MS Terminal 支援 Command Prompt 和 PowerShell 的所有優點,基本上指令行已經可以和 Linux 相融合了,除此之外運作指令提示符也是沒問題的。
在 MS Terminal 開源後,GitHub 的 Star 量增長得非常快,目前已經超過了 5 萬。這足以說明這個項目非常受關注,在社群的開源改進下,這個工具一定挺好用。
- MS Terminal 開源位址: https://github.com/microsoft/terminal
當然,目前 MS Terminal 已經可以直接下載下傳安裝程式了,社群的體驗也非常不錯。是以如果我們在 Windows 上做 Python 開發,指令行工具就可以采用 MS Terminal,它能解決很大一部分的包安裝、環境控制等問題。
MS Terminal 的效果怎麼樣
MS Terminal 最核心的功能就是支援多條頁籤,且每一個頁籤都可以連接配接到指令行 shell 或應用,例如 Command Prompt 或通過 SSH 通路樹莓派等。下圖展示了這種多頁籤的支援情況:
此外,除了功能外,更重要的就是顔值,就像我們常用 zsh 來提供更美觀的指令行一樣。雖然 zsh 目前的 GitHub 收藏量已經達到 9.4 萬了,但 ReadMe 文檔清楚地寫着它最好用于 macOS 或 Linux。而新釋出的 MS Terminal 不論在界面還是在文字風格,都以前都強了很多。
背景透明度、文字高亮都可以自行定義,還能定義 emoji 等符号。如下為基本的展示,我們可以根據自己的需要調整整個界面。
整個項目還在積極開發中,很多功能也都在完善與增加。不過既然是微軟官方維護的開源項目,那麼我們還是非常有信心的,至少在指令行部分可以降低開發過程中的各種報錯。當然如果讀者在 Windows 上有更好的指令行工具推薦,也可以在文末留言。
安裝和配置 VS Code
前面介紹了開發中必不可缺的指令行工具,下面我們該聊一聊 VS Code 了,它是支援 Python 開發的核心工具。下面我們從最初的安裝、環境管理到編寫、測試、釋出代碼,介紹我們該如何優雅地使用 VS Code。
在任何平台上都可以安裝 Visual Studio Code。官網提供了 Windows、Mac 和 Linux 的完整安裝說明,并且會每月更新編輯器,其中包含新功能和錯誤修正。你可以在 Visual Studio Code 網站上找到所有安裝内容:
此外,除名稱相近外,Visual Studio Code(簡稱 VS Code)與基于 Windows 的更大規模的 Visual Studio 幾乎沒有其他相同的地方。
Visual Studio Code 本身支援多種語言,并且它的一個擴充模型具有支援其他元件的豐富生态系統。VS Code 每月更新,你可以在微軟 Python 部落格中了解更新資訊。任何使用者都可以克隆微軟的 VS Code Github 倉庫并貢獻自己的代碼。
VS Code UI 已有詳細記錄,這裡不予贅述:
Python 擴充
如上所述,VS Code 通過詳細記錄的擴充模型支援多種程式設計語言的開發。Python 擴充使使用者可以在 Visual Studio Code 中進行 Python 開發,具有以下特征:
- 既支援 Python 3.4 及更高版本,也支援 Python 2.7 版本
- 使用 IntelliSense 完成代碼補全
- Linting
- 調試支援
- 代碼片段支援
- 單元測試支援
- 自動使用 conda 和虛拟環境
- 在 Jupyter 環境和 Jupyter 筆記本中進行代碼編輯
Visual Studio Code 擴充不僅僅具有程式設計功能:
- Keymaps 允許已經熟悉 Atom,Sublime Text,Emacs,Vim,PyCharm 或其他環境的使用者更加容易上手。
- 主題自定義 UI,無論您喜歡在明亮,黑暗或更豐富多彩的地方進行編碼。
- 語言包提供本地化體驗。
- 以下是比較有用的一些其他擴充和設定:
- GitLens 直接在編輯視窗中提供了大量有用的 Git 功能,包括非責任注釋和存儲庫開發功能。
- 通過從菜單中選擇 File, Auto Save,可以輕松進行自動儲存。預設延遲時間為 1000 毫秒,也可以重新配置。
- Settings Sync 允許使用者借助 GitHub 在不同的裝置中同步自己的 VS Code 設定。如果使用者在不同的計算機上工作,這有助于運作環境保持一緻。
- Docker 讓使用者可以快速輕松地使用 Docker,幫助創作 Dockerfile 和 docker-compose.yml,打包和部署項目,甚至為項目生成适當的 Docker 檔案。
當然,在使用 VS Code 時,你可能會發現其他有用的擴充。請在評論中分享你的發現和設定!
單擊活動欄(Activity Bar)上的「擴充」圖示可以通路和安裝新擴充和主題。使用者可以輸入關鍵詞來搜尋擴充程式,以多種方式對搜尋結果進行排序,快速輕松地安裝擴充程式。在本文中,在活動欄的 Extensions 項中鍵入 python 并單擊 Install 即可安裝 Python 擴充:
使用者可以通過相同的方式查找和安裝上述任何擴充。
Visual Studio Code 配置檔案
值得一提的是,Visual Studio Code 可通過使用者和工作區設定(User and Workspace Settings)實作高度配置。
使用者設定(User settings)在所有 Visual Studio Code 執行個體中都是全局性的,而工作區設定(Workspace Settings)是特定檔案夾或項目工作區的本地設定。工作區設定為 VS Code 提供了極大的靈活性,工作區設定會在整篇文章中提到。工作區設定以.json 檔案的形式存儲在名為.vscode 的項目工作區本地檔案夾中。
啟動新的 Python 程式
讓我們以一個新的 Python 程式來探索 Visual Studio Code 中的 Python 開發。在 VS Code 中,鍵入 Ctrl + N 打開一個新檔案。(你也可以從菜單中選擇「檔案」-「建立」。)
無論你如何操作,你都應該看到一個類似于以下内容的 VS Code 視窗:
打開新檔案後,你即可以輸入代碼。
輸入 Python 代碼
作為測試,我們可以快速編碼埃拉托斯特尼篩法(Sieve of Eratosthenes,它可以找出小于已知數的所有質數)。在剛打開的新頁籤中鍵入以下代碼:
等等,這是怎麼回事?為什麼 Visual Studio Code 沒有進行任何關鍵詞高亮顯示,也沒有進行任何自動格式化或任何真正有用的操作呢?它提供了什麼?
答案是,VS Code 不知道它正在處理的是什麼類型的檔案。緩沖區被稱為 Untitled-1,如果你檢視視窗的右下角,則可以看到 Plain Text(純文字)。
若要激活 Python 擴充,請儲存檔案(從菜單中選擇 File-Save 或者從指令面闆中選擇 File-Save File 或者隻使用 Ctrl + S)為 sieve.py。VS Code 将看到.py 擴充名并正确地将該檔案轉化為 Python 代碼。
現在你的視窗視圖應如下所示:
這樣就好多了!VS Code 會自動将檔案重新格式化為 Python 代碼,你可以通過檢查左下角的語言模式予以驗證。
如果你有多個 Python 安裝(如 Python 2.7、Python 3.x 或 Anaconda),則可以通過單擊語言模式訓示器或者從指令面闆中選擇 Python: Select Interpreter 來更改 VS Code 所要使用的 Python 解釋器。預設情況下,VS Code 支援使用 pep8 格式,但你也可以選擇 black 或 yapf。
現在可以添加其餘的 Sieve 代碼。若要檢視 IntelliSense,請直接鍵入此代碼而不要剪切和粘貼,你應該看到如下内容:
當鍵入代碼時,VS Code 會對 for 和 if 語句下面的行進行自動、适當的縮進,添加右括号,并給出内容提示。
運作 Python 代碼
現在代碼已經完成,你可以運作它了。沒有必要讓編輯器執行此操作:Visual Studio Code 可以直接在編輯器中運作此程式。儲存檔案(Ctrl + S),然後在編輯器視窗中單擊右鍵并選擇在終端(Terminal)中運作 Python 檔案(Run Python File):
你會看到終端窗格顯示在視窗的底部,并顯示代碼輸出結果。
編輯現有的 Python 項目
在 Sieve of Eratosthenes 示例中,你建立了一個 Python 檔案。作為一個例子這很不錯,但很多時候,你需要建立更大的項目,并在更長的時間内在它上面進行開發。
典型的新項目工作流程可能如下所示:
建立一個檔案夾來儲存項目(可能包含一個新的 - GitHub 項目)
- 更改為新檔案夾
- 使用指令 code filename.py 建立初始 Python 代碼
在 Python 項目(而不是單個 Python 檔案)上使用 Visual Studio Code 開辟了更多功能,使得 VS Code 能夠真正發揮作用。讓我們來看看它在更大的項目中如何運作。
假如我們編寫了一個電腦程式,該程式通過艾茲格·迪科斯徹(Edsger Dijkstra)排程場算法的一種變體來解析中綴符号(infix notation)編寫的方程式。
為了說明 Visual Studio Code 以項目為中心的特征,我們現在開始在 Python 中重新建立排程場算法作為方程式評估庫。相應 GitHub 位址:
https://github.com/JFincher42/PyEval。
本地檔案夾建立後,你可以快速打開 VS Code 中的整個檔案夾。由于我們已經建立了檔案夾和基本檔案,是以首選方法(如上所述)做出如下修正:
cd /path/to/project
code .
當你這種方式打開時,VS Code 了解并将使用它看到的任何 virtualenv、pipenv 或 conda 環境。你甚至不需要首先啟動虛拟環境。通過菜單中的 File, Open Folder、鍵盤上的 Ctrl+K, Ctrl+O 或者指令面闆中的 File, Open Folder 等方式,你可以打開使用者界面(UI)上的檔案夾。
以下是建立的方程式 eval 庫項目:
當 Visual Studio Code 打開檔案夾時,它還會再次打開上次打開的檔案(這是可配置的)。你可以打開、編輯、運作和調試列出的任何檔案。左側活動欄中的資料總管視圖(Explorer view)提供檔案夾中所有檔案的視圖,并顯示目前頁籤集中有多少未儲存檔案。
代碼測試的支援
VS Code 可以自動識别在 unittest、pytest 或 Nose 架構中編寫的現有 Python 測試,但前提是在目前環境中安裝了這些架構。作者在 unittest 架構中編寫了一個用于方程式 eval 庫的單元測試,你可以在這個例子中使用它。
若要運作項目中任何 Python 檔案的現有單元測試,請單擊右鍵并選擇 Run Current Unit Test File。系統将提示指定測試架構,在項目中搜尋測試的位置以及測試使用的檔案名模式。
所有這些都儲存為本地.vscode/settings.json 檔案中的工作區設定,并可以進行修改。對于這個等式項目,你可以選擇 unittest、目前檔案夾和模式 *_test.py。
測試架構設定完成并顯示測試後,你可以單擊狀态欄(Status Bar)上的 Run Tests 并從指令面闆中選擇一個 option 來運作所有測試:
通過在 VS Code 中打開測試檔案,單擊狀态欄上的 Run Tests,然後選擇 Run Unit Test Method 以及其他要運作的特定測試,你還可以運作單個測試。這使得解決單個測試失敗并重新運作失敗的測試變得很簡單,進而能夠節省大量時間。測試結果顯示在 Python Test Log 下的 Output 窗格中。
即使 VS Code 是代碼編輯器,直接在 VS Code 中調試 Python 也是可以的。VS Code 提供的諸多功能可以媲美好的代碼調試器,包括:
- 自動變量跟蹤
- 監看表達式
- 斷點
- 調用堆棧檢查
你可以在活動欄上的 Debug 視圖中看到這些功能:
調試器可以控制在内置終端或外部終端執行個體中運作的 Python 應用程式。它可以附加到已經運作的 Python 執行個體中,甚至可以調試 Django 和 Flask 應用程式。
在單個 Python 檔案中調試代碼就像按 F5 啟動調試器一樣簡單。你可以按 F10 和 F11 分别跳過和進入函數,并按 Shift + F5 退出調試器。按 F9 設定斷點,或者通過單擊編輯器視窗中的左空白(lift margin)進行設定。
在開始調試更複雜的項目(包括 Django 或 Flask 應用程式)之前,你首先需要設定并選擇調試配置。設定調試配置相對簡單。從 Debug 視圖中選擇 Configuration 下拉清單(drop-down),然後選擇 Add Configuration 和 Python:
Visual Studio Code 将在目前名為.vscode/launch.json 的檔案夾下建立一個調試配置檔案,它允許使用者設定特定的 Python 配置以及調試 Django 和 Flask 等特定應用程式的設定。
你還可以執行遠端調試,并調試 Jinja 和 Django 模闆。關閉編輯器中的 launch.json 檔案,然後從 Configuration 下拉清單中為應用程式選擇正确的配置。
Git 內建
VS Code 不僅内置對源代碼控制管理的支援,還支援 Git 和 GitHub。你可以在 VS Code 中安裝對其他 SCM 的支援,并列使用它們。使用者可以從 Source Control 視圖通路源代碼控制:
如果你的項目檔案夾包含.git 檔案夾,VS Code 會自動打開所有 Git / GitHub 功能。你可以執行以下諸多任務:
- 将檔案送出給 Git
- 将更改推送到遠端存儲庫(remote repo)并從中取出更改
- check-out 現有或建立新的分支和标簽(branch and tag)
- 檢視并解決合并沖突(merge conflict)
- 檢視差異(view diffs)
所有這些功能都可以直接從 VS Code UI 獲得:
VS Code 還可以識别編輯器外部進行的更改并且正确運作。
在 VS Code 中送出最近的更改相當簡單。修改後的檔案顯示在 Source Control 視圖中,并帶有 M 标記,而新的未跟蹤檔案使用 U 标記。将滑鼠懸停在檔案上然後單擊加号(+)可以暫存更改。在視圖頂部添加送出消息,然後單擊複選标記來送出更改:
你也可以在 VS Code 中将本地送出(local commits)推送到 GitHub。從 Source Control 視圖菜單中選擇 Sync,或者單擊分支訓示器(branch indicator)旁邊狀态欄上的 Synchronize Changes。
是以在作者看來,Visual Studio Code 是最酷的通用編輯器之一,也是 Python 開發的最佳候選工具。希望你也可以在 Python 開發中嘗試使用 Visual Studio Code 編輯器,相信不會令你失望的。
參考文章:
- https://realpython.com/python-development-visual-studio-code/
- https://devblogs.microsoft.com/commandline/introducing-windows-terminal/ 作者:Jon Fincher
來源:微信公衆号 小詹學Python