Windows 平台做 Python 開發的最佳組合

在 Windows 上怎樣做 Python 開發?是像大神那樣使用純文本編輯器,還是用更加完善的 IDE?到底是用自帶的命令行工具,還是需要裝新的 Terminal?本文將帶你了解如何利用微軟官方維護的 MS Terminal 與 VS Code,來為 Python 開發保駕護航。本文選自機器之心 作者Jon Fincher,如有侵權,則可刪除。

使用 Windows 系統一大好處是它的應用太豐富了,甚至強大的 GPU 也能在閑暇時間做點其它「工作」。然而與 Linux 或 macOS 不同,在 Windows 上做開發總會遇到很多挑戰,不論是文件編碼、環境控制還是項目編譯,開發過程中總會有一些神奇的收穫。

這些對於初學者來說尤其突出:我們在安裝某個庫時可能出現各種依賴項錯誤,我們在讀寫文本時出現各種編碼錯誤等等。

那麼在 Windows 上如何做 Python 開發呢?相信大神們都會有自己的解決方案,但本文希望介紹微軟官方發佈的 Terminal 和 Visual Studio Code,希望它們能構建更流暢的 Windows 開發體驗。

image
image

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 萬。這足以說明這個項目非常受關注,在社區的開源改進下,這個工具一定挺好用。

image
image

MS Terminal 開源地址://github.com/microsoft/terminal

當然,目前 MS Terminal 已經可以直接下載安裝程序了,社區的體驗也非常不錯。因此如果我們在 Windows 上做 Python 開發,命令行工具就可以採用 MS Terminal,它能解決很大一部分的包安裝、環境控制等問題。

MS Terminal 的效果怎麼樣

MS Terminal 最核心的功能就是支持多條選項卡,且每一個選項卡都可以連接到命令行 shell 或應用,例如 Command Prompt 或通過 SSH 訪問樹莓派等。下圖展示了這種多選項卡的支持情況:

image
image

此外,除了功能外,更重要的就是顏值,就像我們常用 zsh 來提供更美觀的命令行一樣。雖然 zsh 目前的 GitHub 收藏量已經達到 9.4 萬了,但 ReadMe 文檔清楚地寫着它最好用於 macOS 或 Linux。而新發佈的 MS Terminal 不論在界面還是在文字風格,都以前都強了很多。

背景透明度、文字高亮都可以自行定義,還能定義 emoji 等符號。如下為基本的展示,我們可以根據自己的需要調整整個界面。

image
image

整個項目還在積極開發中,很多功能也都在完善與增加。不過既然是微軟官方維護的開源項目,那麼我們還是非常有信心的,至少在命令行部分可以降低開發過程中的各種報錯。當然如果讀者在 Windows 上有更好的命令行工具推薦,也可以在文末留言。

安裝和配置 VS Code

前面介紹了開發中必不可缺的命令行工具,下面我們該聊一聊 VS Code 了,它是支持 Python 開發的核心工具。下面我們從最初的安裝、環境管理到編寫、測試、發佈代碼,介紹我們該如何優雅地使用 VS Code。

在任何平台上都可以安裝 Visual Studio Code。官網提供了 Windows、Mac 和 Linux 的完整安裝說明,並且會每月更新編輯器,其中包含新功能和錯誤修正。你可以在 Visual Studio Code 網站上找到所有安裝內容:

image
image

此外,除名稱相近外,Visual Studio Code(簡稱 VS Code)與基於 Windows 的更大規模的 Visual Studio 幾乎沒有其他相同的地方。

Visual Studio Code 本身支持多種語言,並且它的一個擴展模型具有支持其他組件的豐富生態系統。VS Code 每月更新,你可以在微軟 Python 博客中了解更新信息。任何用戶都可以克隆微軟的 VS Code Github 倉庫並貢獻自己的代碼。

VS Code UI 已有詳細記錄,這裡不予贅述:

image
image

Python 擴展

如上所述,VS Code 通過詳細記錄的擴展模型支持多種編程語言的開發。Python 擴展使用戶可以在 Visual Studio Code 中進行 Python 開發,具有以下特徵:

  • 既支持 Python 3.4 及更高版本,也支持 Python 2.7 版本

  • 使用 IntelliSense 完成代碼補全

  • Linting

  • 調試支持

  • 代碼片段支持

  • 單元測試支持

  • 自動使用 conda 和虛擬環境

  • 在 Jupyter 環境和 Jupyter 筆記本中進行代碼編輯

image
image

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 擴展:

win平台做python
win平台做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 窗口:

image
image

打開新文件後,你即可以輸入代碼。

輸入 Python 代碼

作為測試,我們可以快速編碼埃拉托斯特尼篩法(Sieve of Eratosthenes,它可以找出小於已知數的所有質數)。在剛打開的新選項卡中鍵入以下代碼:

image
image

等等,這是怎麼回事?為什麼 Visual Studio Code 沒有進行任何關鍵詞高亮顯示,也沒有進行任何自動格式化或任何真正有用的操作呢?它提供了什麼?

答案是,VS Code 不知道它正在處理的是什麼類型的文件。緩衝區被稱為 Untitled-1,如果你查看窗口的右下角,則可以看到 Plain Text(純文本)。

若要激活 Python 擴展,請保存文件(從菜單中選擇 File-Save 或者從命令面板中選擇 File-Save File 或者只使用 Ctrl + S)為 sieve.py。VS Code 將看到.py 擴展名並正確地將該文件轉化為 Python 代碼。

現在你的窗口視圖應如下所示:

image
image

這樣就好多了!VS Code 會自動將文件重新格式化為 Python 代碼,你可以通過檢查左下角的語言模式予以驗證。

如果你有多個 Python 安裝(如 Python 2.7、Python 3.x 或 Anaconda),則可以通過單擊語言模式指示器或者從命令面板中選擇 Python: Select Interpreter 來更改 VS Code 所要使用的 Python 解釋器。默認情況下,VS Code 支持使用 pep8 格式,但你也可以選擇 black 或 yapf。

image
image

現在可以添加其餘的 Sieve 代碼。若要查看 IntelliSense,請直接鍵入此代碼而不要剪切和粘貼,你應該看到如下內容:

當鍵入代碼時,VS Code 會對 for 和 if 語句下面的行進行自動、適當的縮進,添加右括號,並給出內容提示。

image
image

運行 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 地址://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)提供文件夾中所有文件的視圖,並顯示當前選項卡集中有多少未保存文件。

image
image

代碼測試的支持

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 來運行所有測試:

image
image

通過在 VS Code 中打開測試文件,單擊狀態欄上的 Run Tests,然後選擇 Run Unit Test Method 以及其他要運行的特定測試,你還可以運行單個測試。這使得解決單個測試失敗並重新運行失敗的測試變得很簡單,從而能夠節省大量時間。測試結果顯示在 Python Test Log 下的 Output 窗格中。

調試支持

即使 VS Code 是代碼編輯器,直接在 VS Code 中調試 Python 也是可以的。VS Code 提供的諸多功能可以媲美好的代碼調試器,包括:

  • 自動變量跟蹤

  • 監看錶達式

  • 斷點

  • 調用堆棧檢查

你可以在活動欄上的 Debug 視圖中看到這些功能:

image
image

調試器可以控制在內置終端或外部終端實例中運行的 Python 應用程序。它可以附加到已經運行的 Python 實例中,甚至可以調試 Django 和 Flask 應用程序。

在單個 Python 文件中調試代碼就像按 F5 啟動調試器一樣簡單。你可以按 F10 和 F11 分別跳過和進入函數,並按 Shift + F5 退出調試器。按 F9 設置斷點,或者通過單擊編輯器窗口中的左空白(lift margin)進行設置。

在開始調試更複雜的項目(包括 Django 或 Flask 應用程序)之前,你首先需要設置並選擇調試配置。設置調試配置相對簡單。從 Debug 視圖中選擇 Configuration 下拉列表(drop-down),然後選擇 Add Configuration 和 Python:

image
image

Visual Studio Code 將在當前名為.vscode/launch.json 的文件夾下創建一個調試配置文件,它允許用戶設置特定的 Python 配置以及調試 Django 和 Flask 等特定應用程序的設置。

你還可以執行遠程調試,並調試 Jinja 和 Django 模板。關閉編輯器中的 launch.json 文件,然後從 Configuration 下拉列表中為應用程序選擇正確的配置。

Git 集成

VS Code 不僅內置對源代碼控制管理的支持,還支持 Git 和 GitHub。你可以在 VS Code 中安裝對其他 SCM 的支持,並列使用它們。用戶可以從 Source Control 視圖訪問源代碼控制:

image
image

如果你的項目文件夾包含.git 文件夾,VS Code 會自動打開所有 Git / GitHub 功能。你可以執行以下諸多任務:

  • 將文件提交給 Git

  • 將更改推送到遠程存儲庫(remote repo)並從中取出更改

  • check-out 現有或創建新的分支和標籤(branch and tag)

  • 查看並解決合併衝突(merge conflict)

  • 查看差異(view diffs)

所有這些功能都可以直接從 VS Code UI 獲得:

image
image

VS Code 還可以識別編輯器外部進行的更改並且正確運作。

在 VS Code 中提交最近的更改相當簡單。修改後的文件顯示在 Source Control 視圖中,並帶有 M 標記,而新的未跟蹤文件使用 U 標記。將鼠標懸停在文件上然後單擊加號(+)可以暫存更改。在視圖頂部添加提交消息,然後單擊複選標記來提交更改:

image
image

你也可以在 VS Code 中將本地提交(local commits)推送到 GitHub。從 Source Control 視圖菜單中選擇 Sync,或者單擊分支指示器(branch indicator)旁邊狀態欄上的 Synchronize Changes。

所以在作者看來,Visual Studio Code 是最酷的通用編輯器之一,也是 Python 開發的最佳候選工具。希望你也可以在 Python 開發中嘗試使用 Visual Studio Code 編輯器,相信不會令你失望的。

參考文章

  • //realpython.com/python-development-visual-studio-code

  • //devblogs.microsoft.com/commandline/introducing-windows-terminal