前言:本書是一本面向Python開發者PyCharm的詳細使用指南。
(1)第1章:下載與安裝
(2)第2章:試調與執行
(3)第3章:介面與排版
(4)第4章:程式碼的編輯
(5)第5章:快捷與效率
(6)第6章:搜尋與導航
目錄大綱:
除錯相關快捷鍵
以下是在一些方面的應用:本文將介紹:
PyCharm 安裝在 PyCharm 中寫程式碼在 PyCharm 中執行程式碼在 PyCharm 中進行程式碼 debug 和測試在 PyCharm 中編輯已有專案在 PyCharm 中搜索和導航在 PyCharm 中使用版本控制在 PyCharm 中使用外掛和外部工具使用 PyCharm Professional 功能,如 Django 支援和科學模式本文假設讀者熟悉 Python 開發,且計算機中已安裝某個版本的 Python。該教程將使用 Python 3.6 版本,螢幕截圖和 demo 均來自 macOS 系統。由於 PyCharm 可在所有主流平臺上執行,讀者在其他系統中會看到略微不同的 UI 元素,可能需要調整某些命令。
PyCharm 安裝
本文將使用 PyCharm Community Edition 2019.1 版本,該版本免費且可在所有主流平臺上使用。只有最後一部分「PyCharm Professional 功能」使用的是 PyCharm Professional Edition 2019.1 版本。
推薦使用 JetBrains Toolbox App 安裝 PyCharm。使用該 App,你可以安裝不同的 JetBrains 產品或者同一產品的不同版本,並在必要的情況下更新、回滾和輕鬆刪除任意工具。你還可以在恰當的 IDE 及版本中快速開啟任意專案。
Toolbox App 安裝指南,參見 JetBrains 官方文件:/file/2020/09/10/20200910010228_1.jpg.html App 會根據你的作業系統提供合適的安裝說明。如果它無法無法準確識別系統,你可以在右上角的下拉列表中找到合適的系統。
安裝成功後,啟動該 app 並接受使用者協議。在 Tools 選項下,你可以看到一個可用產品列表。從中找到 PyCharm Community,並點選 Install。
好啦,現在你的機器上已經安裝 PyCharm 了。如果不想使用 Toolbox app,你可以單獨安裝 PyCharm。
啟動 PyCharm,你將看到匯入設定彈窗。PyCharm 會自動檢測出這是首次安裝,併為你選擇「Do not import settings」選項。點選 OK,之後 PyCharm 會讓你選擇鍵盤對映(keymap scheme)。保留預設設定,點選右下角的「Next: UI Themes」:
PyCharm 將詢問選擇深色模式 Darcula 還是淺色模式。你可以選擇自己喜歡的模式,並點選「Next: Launcher Script」:
本教程將使用深色模式 Darcula。
在下一個頁面上,直接保留預設設定,並點選「Next: Featured plugins」,這時 PyCharm 將展示可用外掛列表。點選「Start using PyCharm」,現在你可以寫程式碼了!
在 PyCharm 中寫程式碼
在 PyCharm 中,你可以在「專案」中執行任意操作。因此,首先你需要建立一個專案。
指定專案位置,開啟 Project Interpreter 列表,選擇建立新的專案直譯器或者使用已有的直譯器。選擇「New environment using」,開啟其右方的下拉列表,選擇 Virtualenv、Pipenv 或 Conda。這些工具可以為不同專案單獨建立 Python 環境,從而分別儲存不同專案所需的依賴項。
你可以選擇其中任意一個,本教程使用的是 Virtualenv。選擇後,指定環境位置,從 Python 直譯器列表中選擇要安裝在系統中的 base interpreter。通常,保持預設設定即可。下面有兩個可選框:在新環境中繼承全域性包環境、令當前環境可以用其它所有專案,兩個都不要選。
螢幕上出現「Tip of the Day」彈窗,在每次啟動時 PyCharm 通過該彈窗提供 trick。關掉該彈窗。
現在我們可以開始新的 Python 程式了。如果你使用的是 Mac 系統,使用 Cmd+N 鍵;如果你使用的是 Windows 或 Linux 系統,使用 Alt+Ins 鍵。然後選擇 Python File。你也可以在選單中選擇 File → New。將新檔案命名為 guess_game.py 並點選 OK。你將看到如下 PyCharm 視窗:
至於測試程式碼,我們來快速寫一個簡單的猜謎遊戲,即程式選擇一個數字讓使用者來猜,在每一次猜測時,程式將告訴使用者他猜的數字比神祕數字大還是小,使用者猜中數字時遊戲結束。以下是該遊戲的程式碼:
直接鍵入上述程式碼,而不是複製貼上。你會看到如下畫面:
如上圖所示,PyCharm 提供 Intelligent Coding Assistance 功能,可以執行程式碼補全、程式碼檢查、錯誤高亮顯示和快速修復建議。比如鍵入 main 並點選 tab 鍵,PyCharm 會自動補全整個 main 從句。
此外,如果你在條件句前忘記鍵入 if,在該句子最後增添.if 並點選 Tab 鍵,PyCharm 將修復該 if 條件句。該用法同樣適用於 True.while。這即是 PyCharm 的 Postfix Completion 功能,它可以幫助使用者減少退格鍵使用次數。
在 PyCharm 中執行程式碼
現在你已經編碼完成該遊戲,可以運行了。
該遊戲程式有三種執行方式:
在 Mac 系統中使用快捷鍵 Ctrl+Shift+R,在 Windows 或 Linux 系統中,使用快捷鍵 Ctrl+Shift+F10。右鍵單擊背景,從選單中選擇「Run 『guess_game』」。由於該程式具備__main__ 從句,你可以點選__main__ 從句左側的綠色小箭頭,選擇「Run 『guess_game』」。使用以上任一方式執行該程式,視窗底部會出現終端面板(Terminal pane),顯示你的程式碼輸出結果:
你可以玩一下這個遊戲,看看自己能否猜中數字。(專業建議:從 50 開始猜。)
在 PyCharm 中進行程式碼 debug
找到神祕數字了嗎?如果找到了,你可能會看到一些奇怪的東西:程式沒有打印出祝賀資訊和顯示退出按鈕,而是重新開始了。這就是 bug 所在。要想發現程式重新開始的原因,你需要 debug。
斷點即程式執行到這一行時會自動停止,你可以探索斷點處之後的程式碼有什麼錯誤。接下來,從以下三種方式中選擇一種開始 debug:
在 Mac 系統中使用 Ctrl+Shift+D 鍵,在 Windows 或 Linux 系統中使用 Shift+Alt+F9 鍵。右鍵單擊背景,選擇「Debug 『guess_game』」。點選__main__從句左側的綠色小箭頭,選擇「Debug 『guess_game』」。之後,你將看到底部出現 Debug 視窗:
按照下列步驟執行程式 debug:
注意當前行被藍色高亮顯示。Debug 視窗顯示 random_int 及其值。記錄該數字。(上圖中該數字為 85。)點選 F8 執行當前程式碼行,並執行到下一行程式碼。如有必要,你也可以使用 F7 跳轉到當前行內的函式。隨著你繼續執行語句,變數的變化將自動呈現在 Debugger 視窗。注意 Debugger 標籤右側有一個 Console 標籤。Console 標籤和 Debugger 標籤相互獨立。你可以在 Console 中與程式進行互動,在 Debugger 中執行 debug 動作。轉向 Console 標籤,進入猜測過程。鍵入左側 Debugger 標籤中顯示的數字,點選 Enter 鍵。轉回 Debugger 標籤。再次點選 F8,計算 if 語句。注意現在你在第 14 行。為什麼不是第 11 行呢?因為第 10 行的 if 語句被計算為 False。那麼為什麼當你鍵入數字後它算出來為 False 了呢?仔細看第 10 行,注意我們在對比 user_guess 和一個錯誤的項。我們應該對比使用者猜測的數字和 random_int,但此處我們對比的是 randint(從 random 包匯入的函式)。將 randint 更改為 random_int,按照同樣的步驟重新開始 debug。你會發現,這一次到達的是第 11 行,第 10 行算出來為 True:恭喜你,bug 被修復了!
在 PyCharm 中進行程式碼測試
不經單元測試的應用都不可靠。PyCharm 可以幫助你快速舒適地寫單元測試並執行。預設情況下,unittest 被用作測試執行器,而 PyCharm 還支援其他測試框架,如 pytest、nose、doctest、tox 和 trial。例如,你可以按照以下步驟為專案選擇 pytest 測試執行器:
開啟 Settings/Preferences → Tools → Python Integrated Tools 設定對話方塊。在預設測試執行器欄位中選擇 pytest。點選 OK 儲存該設定。本教程的示例將使用預設測試執行器 unittest。
在同一個專案中,建立檔案 calculator.py,並將以下 Calculator 類放入該檔案:
PyCharm 使得為已有程式碼建立測試變得輕而易舉。開啟 calculator.py 檔案,執行以下步驟中的任意一個:
在 Mac 系統中使用 Shift+Cmd+T 鍵,在 Windows 或 Linux 系統中使用 Ctrl+Shift+T。右鍵單擊該類的背景,選擇「Go To and Test」。在主選單中嗎,選擇 Navigate → Test。選擇「Create New Test…」,得到以下視窗:
Target directory、Test file name 和 Test class name 這三項均保留預設設定。選中上圖中兩種需要測試的方法並點選 OK。好了!PyCharm 自動建立檔案 test_calculator.py,並在其中建立了以下 stub test:
使用以下方法中的任意一個執行測試:
在 Mac 系統中使用 Ctrl+R 鍵,在 Windows 或 Linux 系統中使用 Shift+F10 鍵。右鍵單擊背景,選擇「Run 『Unittests for test_calculator.py』」。點選測試類名稱左側的綠色小箭頭,選擇「Run 『Unittests for test_calculator.py』」。你將看到底部出現測試視窗,所有測試均失敗:
注意,左側是測試結果的層次結構,右側是終端的輸出。現在,將程式碼更改成以下程式碼,實現 test_add:
重新執行測試,你會看到一個測試通過了,另一個則失敗。按照如下操作探索不同選項,來展示已通過測試和被忽略測試,按照字母順序對測試進行排序,以及按照時長對測試進行排序:
注意,上圖中的 sleep(0.1) 方法的作用是使其中一個測試變慢,以便按時長對測試進行排序。
在 PyCharm 中編輯已有專案
單檔案專案非常適合作為示例,但你通常需要處理較大的專案。這部分將介紹如何使用 PyCharm 處理較大專案。
為了探索 PyCharm 以專案為中心的特徵,你將使用 Alcazar web 框架(該框架用於學習目的)。在本地複製該 repo(地址:https://realpython.com/optins/view/alcazar-web-framework/)。
當你在本地已有專案時,使用以下方法中的任意一個在 PyCharm 中開啟專案:
之後,在計算機中找到包含該專案的資料夾,並開啟。
如果該專案包含虛擬環境,PyCharm 將自動使用該虛擬環境,並將它作為專案直譯器。
如果你需要配置不同的虛擬環境 virtualenv,在 Mac 上開啟 Preferences,或在 Windows 或 Linux 系統中使用 Ctrl+Alt+S 開啟 Settings,找到 Project: ProjectName。開啟下拉列表,選擇 Project Interpreter:
在 PyCharm 中搜索和導航
在大專案中,我們很難記住每個事物的位置,因此快速導航和搜尋非常重要。PyCharm 可以提供這些功能。接下來,我們使用上一節中開啟的專案,實踐以下快捷鍵:
在當前檔案中搜索程式碼段:在 Mac 系統中使用 Cmd+F 鍵,在 Windows 或 Linux 系統中使用 Ctrl+F 鍵。在整個專案中搜索程式碼段:在 Mac 系統中使用 Cmd+Shift+F 鍵,在 Windows 或 Linux 系統中使用 Ctrl+Shift+F 鍵。搜尋類:在 Mac 系統中使用 Cmd+O 鍵,在 Windows 或 Linux 系統中使用 Ctrl+N 鍵。搜尋檔案:在 Mac 系統中使用 Cmd+Shift+O 鍵,在 Windows 或 Linux 系統中使用 Ctrl+Shift+N 鍵。如果你不知道要搜尋的是檔案、類還是程式碼段,則搜尋全部:按兩次 Shift 鍵。導航可使用以下快捷鍵:
前往變數的宣告:在 Mac 系統中使用 Cmd 鍵,在 Windows 或 Linux 系統中使用 Ctrl 鍵,然後單擊變數。尋找類、方法或檔案的用法:使用 Alt+F7 鍵。檢視近期更改:使用 Shift+Alt+C 鍵,或者在主選單中點選 View → Recent Changes。檢視近期檔案:在 Mac 系統中使用 Cmd+E 鍵,在 Windows 或 Linux 系統中使用 Ctrl+E 鍵,或者在主選單中點選 View → Recent Files。多次跳轉後在導航歷史中前進和後退:在 Mac 系統中使用 Cmd+[ / Cmd+] 鍵,在 Windows 或 Linux 系統中使用 Ctrl+Alt+Left / Ctrl+Alt+Right 鍵。更多細節,參見官方文件:https://www.jetbrains.com/help/pycharm/tutorial-exploring-navigation-and-search.html。
PyCharm 中的版本控制
版本控制系統(如 Git 和 Mercurial)是現代軟體開發世界中最重要的工具之一。因此,IDE 必須支援版本控制。PyCharm 在這方面做得很好,它集成了大量流行的版本控制系統,如 Git(和 Github (https://github.com/))、Mercurial、Perforce 和 Subversion。
注:以下示例中使用的版本控制系統為 Git。
配置版本控制系統(VCS)
要想實現 VCS 整合,你需要在頂部選單點選 VCS → VCS Operations Popup…,或者在 Mac 系統中使用 Ctrl+V 鍵,在 Windows 或 Linux 系統中使用 Alt+` 鍵。選擇 Enable Version Control Integration…,你將看到以下視窗:
從下拉列表中選擇 Git,點選 OK,這樣你就為專案設定好了 VCS。(注意,如果你開啟的已有專案已經具備版本控制系統,PyCharm 將會發現並自動使用該版本控制系統。)
這時如果你前往 VCS Operations Popup…,你會發現一個不同的彈窗,它具備選項 git add、git stash、git branch、git commit、git push 等等:
提交和衝突處理這是 PyCharm 中 VCS 整合的兩大特徵,我個人經常使用並且非常喜歡。假如你完成了工作,打算提交,前往 VCS → VCS Operations Popup… → Commit…,或者在 Mac 系統中使用 Cmd+K 鍵,在 Windows 或 Linux 系統中使用 Ctrl+K 鍵。你將看到如下視窗:
選擇要提交的檔案寫下提交資訊在提交前執行各項檢查檢視更改點選右下角 Commit 按鈕旁邊的箭頭,選擇 Commit and Push…,從而一次性完成提交和 push。是不是感覺很神奇很迅速?特別是如果你以前經常通過命令列手動執行這些任務時。
團隊合作中會出現合併衝突(merge conflict)。當一個人對你正在處理的檔案提交更改時,你們二人更改了同一行導致更改重疊,這時 VCS 無法決定選擇你的更改還是隊友的更改。那麼你可以使用以下箭頭和符號來解決這個問題:
看起來很奇怪,我們很難分辨應該刪除哪些更改、保留哪些更改。不要怕,PyCharm 來了!它可以用更好、更簡潔的方法解決衝突。在頂部選單中前往 VCS,選擇 Git,然後選擇 Resolve conflicts…。選擇存在衝突的檔案,點選 Merge,出現以下視窗:
在左側列中,你可以檢視自己做的更改。在右側列中,可以檢視隊友做的更改。而中間列則顯示結果。存在衝突的程式碼行被高亮顯示,你可以在它們旁邊看到 X 和 >>/<<。點選箭頭表示接受更改,點選 X 則表示拒絕更改。解決所有衝突後,點選 Apply 按鈕:
在上圖中,對於第一個衝突行,作者選擇拒絕自己的更改,接受隊友的更改。而在第二個衝突行中,作者接受了自己的更改,拒絕了隊友的更改。
使用 PyCharm 中的 VCS 整合還可以執行很多操作。詳情參見 https://www.jetbrains.com/help/pycharm/version-control-integration.html。
在 PyCharm 中使用外掛和外部工具
在 PyCharm 中你可以找到開發所需的幾乎所有功能。如果沒找到,那麼很可能存在一個外掛,向 PyCharm 提供你需要的功能。例如,它們可以:
新增多語言和多框架支援使用快捷鍵提示(shortcut hint)、檔案監視器(file watcher)等提升你的生產效率利用程式碼練習,幫助你學習新的程式語言例如,IdeaVim 外掛向 PyCharm 新增 Vim 模擬。如果你喜歡 Vim,這個外掛可以實現不錯的結合。
Material Theme UI 外掛可將 PyCharm 的外觀改變為 Material Design 的外觀:
Vue.js 外掛使 PyCharm 支援 Vue.js 專案。Markdown 外掛使得在 IDE 內可以編輯 Markdown 檔案,並實時預覽渲染後的 HTML。
在 Mac 系統上點選 Preferences → Plugins,在 Windows 或 Linux 系統中點選 Settings → Plugins,你可以在 Marketplace 標籤下找到和安裝所有可用外掛:
如果仍然沒找到所需外掛,你甚至可以自己開發一個。
如果你找不到合適的外掛,又不想自己開發,因為 PyPI 上有可用的包,你可以將這個包作為外部工具新增到 PyCharm。以程式碼分析器 Flake8 為例。
首先,在所選 Terminal app 中鍵入 pip install flake8,從而在虛擬環境中安裝 Flake8。或者也可以使用 PyCharm 整合的 Terminal:
在 Mac 系統上點選 Preferences → Tools,在 Windows 或 Linux 系統中點選 Settings → Tools,選擇 External Tools。然後點選底部 (1) 處的 + 按鈕。在彈出的視窗中,輸入細節並在兩個視窗中點選 OK,如下圖所示:
上圖中,Program (2) 指 Flake8,你可以在虛擬環境資料夾(bin)中找到它。Arguments (3) 表示你想用 Flake8 分析的檔案。Working directory 表示專案目錄。
你可以把這裡所有項的絕對路徑寫死,但這就意味著你無法在其他專案中使用該外部工具,只能在一個專案中針對一個檔案使用該工具。
因此你需要使用 Macros。它是$name$格式的變數,根據語境而變化。例如,當你編輯 first.py 時,$FileName$ 為 first.py,當你編輯 second.py 時,$FileName$ 為 second.py。你可以檢視它們的列表,點選 Insert Macro… 按鈕將其中一個插入。此處你使用了 macros,它們的值會根據你目前處理的專案而改變,Flake8 將繼續準確執行其工作。
要想使用它,你需要建立檔案 example.py,並在其中寫入以下程式碼:
上述程式碼故意破壞了 Flake8 的一些規則。右鍵單擊檔案背景,選擇 External Tools → Flake8。Flake8 分析結果將出現在視窗底部:
為了使效果更好,你可以為其新增快捷鍵。在 Mac 系統中選擇 Preferences,在 Windows 或 Linux 系統中選擇 Settings。然後,點選 Keymap → External Tools → External Tools。雙擊 Flake8,選擇 Add Keyboard Shortcut,出現以下視窗:
擊 Flake8,選擇 Add Keyboard Shortcut,出現以下視窗:
上圖中,快捷鍵是 Ctrl+Alt+A(本教程使用該快捷鍵)。你可以在文字框中新增喜歡的快捷鍵,然後在兩個視窗中點選 OK。然後,你就可以用該快捷鍵,在 Flake8 的幫助下分析目前在處理的檔案了。
PyCharm Professional 功能
PyCharm Professional 是 PyCharm 的付費版本,具備更多開箱即用的功能和整合。這部分將概覽其主要功能,以及官方文件連結(其中詳細介紹了每一項功能)。記住,以下功能在 PyCharm Community 版本中均不可用。
Django 支援
Django 是最流行和最受喜愛的 Python web 框架,PyCharm 對 Django 提供廣泛的支援。要確保對 Django 的支援,需要執行以下步驟:
在 Mac 系統中開啟 Preferences,在 Windows 或 Linux 系統中開啟 Settings。選擇 Languages and Frameworks。選擇 Django。檢查複選框 Enable Django support。應用更改。現在確保了對 Django 的支援,你在 PyCharm 中的 Django 開發之旅將輕鬆很多。具體而言在建立專案時,你會得到一個專用的 Django 專案型別。這表示,當你選擇該型別時,你將擁有所有必要檔案和設定。這等同於使用 django-admin startproject mysite。
你也可以在 PyCharm 內直接執行 manage.py 命令。目前支援的 Django 模板,包括以下一些:
語法和錯誤高亮顯示 程式碼補全 導航 block 名稱補全 自定義標籤和過濾器補全 標籤和過濾器的快速文件 模板 debug 能力除此之外,我們還可以在其他 Django 部分(如檢視、URL 和模型)中執行程式碼補全、對 Django ORM 提供程式碼追蹤支援(code insight support)、對 Django 模型提供模型依賴項關係圖。
更多細節,參見官方文件:https://www.jetbrains.com/help/pycharm/django-support7.html。
資料庫支援
現代資料庫開發是一個複雜的任務,需要多個支援系統和工作流。這也是 JetBrains 開發獨立 IDE DataGrip 的原因。DataGrip 是獨立於 PyCharm 的產品,二者的應用場景和授權都不相同。
但幸運的是,通過 Database tools and SQL 外掛(該外掛預設開啟),PyCharm 可以支援 DataGrip 中的所有特性。在該外掛的幫助下,你可以查詢、建立和管理資料庫,不管資料庫在本地、伺服器,還是在雲端。該外掛支援 MySQL、PostgreSQL、Microsoft SQL Server、SQLite、MariaDB、Oracle、Apache Cassandra 等。
關於該外掛的更多用途,請檢視文件:https://www.jetbrains.com/help/pycharm/relational-databases.html。
執行緒併發視覺化(Thread Concurrency Visualization)
Django Channels、asyncio 和近期框架(如 Starlette (https://www.starlette.io/))表明非同步 Python 程式設計正逐漸成為趨勢。非同步程式設計具備很多好處,但很難寫,也很難 debug。在此類案例中,Thread Concurrency Visualization 就是醫生,幫助你全面管理多執行緒應用並進行優化。
更多細節,參見文件:https://www.jetbrains.com/help/pycharm/thread-concurrency-visualization.html。
Profiler
說到優化,profiling 是另一種程式碼優化方法。profiling 可以幫助你檢視程式碼的哪一部分佔用了最多的執行時間。profiler 執行的優先順序如下:
1. vmprof
2. yappi
3. cProfile
如果你沒有安裝 vmprof 或 yappi,則執行標準 cProfile。更多細節,參見:https://www.jetbrains.com/help/pycharm/profiler.html。
科學模式
Python 不僅是通用和 web 程式語言,由於 NumPy、SciPy、scikit-learn、Matplotlib、Jupyter 等庫和工具的加持,Python 成為資料科學和機器學習領域的最優工具。有了這些強大工具,你還需要一個強大的 IDE 來支援這些庫所具備的繪圖、分析等所有功能。
遠端開發
很多應用出現 bug 的一個常見原因是,開發環境和生產環境不同。儘管在大多數情況下,開發時完美複製生產環境並不現實,但力求實現完美復刻是值得追尋的目標。在 PyCharm 的幫助下,你可以使用另一臺計算機(如 Linux VM)上的直譯器對應用進行 debug。這樣,你就可以擁有與生產環境一樣的直譯器了,從而避免很多因開發環境和生產環境差異導致的 bug。
結論:PyCharm 是最好的 Python 開發 IDE 之一。它提供大量優勢,幫助執行例行任務,從而節約大量時間。學完本教程,現在你知道如何利用 PyCharm 提高生產效率了嗎?