1. 程式人生 > >Windows 平臺做 Python 開發的最佳組合

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

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

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

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

MS Terminal 的效果怎麼樣

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

image

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

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

image

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

安裝和配置 VS Code

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

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

image

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

Visual Studio Code 本身支援多種語言,並且它的一個擴充套件模型具有支援其他元件的豐富生態系統。VS Code 每月更新,你可以在微軟 Python 部落格中瞭解更新資訊。任何使用者都可以克隆微軟的 VS Code Github 倉庫並貢獻自己的程式碼。

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

image

Python 擴充套件

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

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

  • 使用 IntelliSense 完成程式碼補全

  • Linting

  • 除錯支援

  • 程式碼片段支援

  • 單元測試支援

  • 自動使用 conda 和虛擬環境

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

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

使用者可以通過相同的方式查詢和安裝上述任何擴充套件。

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

開啟新檔案後,你即可以輸入程式碼。

輸入 Python 程式碼

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

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

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

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

image

現在可以新增其餘的 Sieve 程式碼。若要檢視 IntelliSense,請直接鍵入此程式碼而不要剪下和貼上,你應該看到如下內容:

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

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 地址: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)提供資料夾中所有檔案的檢視,並顯示當前選項卡集中有多少未儲存檔案。

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

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

除錯支援

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

  • 自動變數跟蹤

  • 監看錶達式

  • 斷點

  • 呼叫堆疊檢查

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

image

偵錯程式可以控制在內建終端或外部終端例項中執行的 Python 應用程式。它可以附加到已經執行的 Python 例項中,甚至可以除錯 Django 和 Flask 應用程式。

在單個 Python 檔案中除錯程式碼就像按 F5 啟動偵錯程式一樣簡單。你可以按 F10 和 F11 分別跳過和進入函式,並按 Shift + F5 退出偵錯程式。按 F9 設定斷點,或者通過單擊編輯器視窗中的左空白(lift margin)進行設定。

在開始除錯更復雜的專案(包括 Django 或 Flask 應用程式)之前,你首先需要設定並選擇除錯配置。設定除錯配置相對簡單。從 Debug 檢視中選擇 Configuration 下拉列表(drop-down),然後選擇 Add Configuration 和 Python:

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

如果你的專案資料夾包含.git 資料夾,VS Code 會自動開啟所有 Git / GitHub 功能。你可以執行以下諸多工:

  • 將檔案提交給 Git

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

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

  • 檢視並解決合併衝突(merge conflict)

  • 檢視差異(view diffs)

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

image

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

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

image

你也可以在 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