天天看點

萬字長文,詳盡PyCharm 教程~

萬字長文,詳盡PyCharm 教程~

正文

本文假設讀者熟悉 python 開發,且計算機中已安裝某個版本的 python。該教程将使用 python 3.6 版本,螢幕截圖和 demo 均來自 macos 系統。由于 pycharm 可在所有主流平台上運作,讀者在其他系統中會看到略微不同的 ui 元素,可能需要調整某些指令。

本文将使用 pycharm community edition 2019.1 版本,該版本免費且可在所有主流平台上使用。隻有最後一部分「pycharm professional 功能」使用的是 pycharm professional edition 2019.1 版本。

推薦使用 jetbrains toolbox app 安裝 pycharm。使用該 app,你可以安裝不同的 jetbrains 産品或者同一産品的不同版本,并在必要的情況下更新、復原和輕松删除任意工具。你還可以在恰當的 ide 及版本中快速打開任意項目。

toolbox app 安裝指南,參見 jetbrains 官方文檔:https://www.jetbrains.com/help/pycharm/installation-guide.html#toolbox。

該 app 會根據你的作業系統提供合适的安裝說明。如果它無法無法準确識别系統,你可以在右上角的下拉清單中找到合适的系統。

萬字長文,詳盡PyCharm 教程~

安裝成功後,啟動該 app 并接受使用者協定。在 tools 選項下,你可以看到一個可用産品清單。從中找到 pycharm community,并點選 install。

好啦,現在你的機器上已經安裝 pycharm 了。如果不想使用 toolbox app,你可以單獨安裝 pycharm。

啟動 pycharm,你将看到導入設定彈窗。pycharm 會自動檢測出這是首次安裝,并為你選擇「do not import settings」選項。點選 ok,之後 pycharm 會讓你選擇鍵盤映射(keymap scheme)。保留預設設定,點選右下角的「next: ui themes」:

萬字長文,詳盡PyCharm 教程~

pycharm 将詢問選擇深色模式 darcula 還是淺色模式。你可以選擇自己喜歡的模式,并點選「next: launcher script」:

本教程将使用深色模式 darcula。

在下一個頁面上,直接保留預設設定,并點選「next: featured plugins」,這時 pycharm 将展示可用插件清單。點選「start using pycharm」,現在你可以寫代碼了!

在 pycharm 中,你可以在「項目」中執行任意操作。是以,首先你需要建立一個項目。

安裝和打開 pycharm 後,你會看到歡迎頁面。點選「create new project」,出現「new project」彈窗:

指定項目位置,打開 project interpreter 清單,選擇建立新的項目解釋器或者使用已有的解釋器。選擇「new environment using」,打開其右方的下拉清單,選擇 virtualenv、pipenv 或 conda。這些工具可以為不同項目單獨建立 python 環境,進而分别儲存不同項目所需的依賴項。

你可以選擇其中任意一個,本教程使用的是 virtualenv。選擇後,指定環境位置,從 python 解釋器清單中選擇要安裝在系統中的 base interpreter。通常,保持預設設定即可。下面有兩個可選框:在新環境中繼承全局包環境、令目前環境可以用其它所有項目,兩個都不要選。

點選右下角的「create」,建立新項目:

螢幕上出現「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 功能,它可以幫助使用者減少倒退鍵使用次數。

現在你已經編碼完成該遊戲,可以運作了。

該遊戲程式有三種運作方式:

在 mac 系統中使用快捷鍵 ctrl+shift+r,在 windows 或 linux 系統中,使用快捷鍵 ctrl+shift+f10。

右鍵單擊背景,從菜單中選擇「run 『guess_game』」。

由于該程式具備main__ 從句,你可以點選__main 從句左側的綠色小箭頭,選擇「run 『guess_game』」。

使用以上任一方式運作該程式,視窗底部會出現終端面闆(terminal pane),顯示你的代碼輸出結果:

你可以玩一下這個遊戲,看看自己能否猜中數字。(專業建議:從 50 開始猜。)

找到神秘數字了嗎?如果找到了,你可能會看到一些奇怪的東西:程式沒有列印出祝賀資訊和顯示退出按鈕,而是重新開始了。這就是 bug 所在。要想發現程式重新開始的原因,你需要 debug。

首先,點選第 8 行代碼左側的空白區域,設定斷點:

斷點即程式運作到這一行時會自動停止,你可以探索斷點處之後的代碼有什麼錯誤。接下來,從以下三種方式中選擇一種開始 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 可以幫助你快速舒适地寫單元測試并運作。預設情況下,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 以項目為中心的特征,你将使用 alcazar web 架構(該架構用于學習目的)。在本地複制該 repo(位址:https://realpython.com/optins/view/alcazar-web-framework/)。

當你在本地已有項目時,使用以下方法中的任意一個在 pycharm 中打開項目:

在主菜單中點選 file → open。

在歡迎頁面點選 open。

之後,在計算機中找到包含該項目的檔案夾,并打開。

如果該項目包含虛拟環境,pycharm 将自動使用該虛拟環境,并将它作為項目解釋器。

如果你需要配置不同的虛拟環境 virtualenv,在 mac 上打開 preferences,或在 windows 或 linux 系統中使用 ctrl+alt+s 打開 settings,找到 project: projectname。打開下拉清單,選擇 project interpreter:

從下拉清單中選擇 virtualenv。如果沒有要選擇的項,則點選下拉清單右方的設定按鈕選擇 add…。其餘步驟和建立新項目的步驟相同。

在大項目中,我們很難記住每個事物的位置,是以快速導航和搜尋非常重要。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 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 等等:

如果你找不到所需要的選項,你可以在頂部菜單中點選 vcs,選擇 git,在這裡你可以建立和檢視 pull request。

這是 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 提供你需要的功能。例如,它們可以:

添加多語言和多架構支援

使用快捷鍵提示(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。它是格式的變量,根據語境而變化。例如,當你編輯 first.py 時, 為 first.py,當你編輯 second.py 時, 為 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,出現以下視窗:

上圖中,快捷鍵是 ctrl+alt+a(本教程使用該快捷鍵)。你可以在文本框中添加喜歡的快捷鍵,然後在兩個視窗中點選 ok。然後,你就可以用該快捷鍵,在 flake8 的幫助下分析目前在處理的檔案了。

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。

說到優化,profiling 是另一種代碼優化方法。profiling 可以幫助你檢視代碼的哪一部分占用了最多的執行時間。profiler 運作的優先級如下:

vmprof

yappi

cprofil

如果你沒有安裝 vmprof 或 yappi,則運作标準 cprofile。更多細節,參見:https://www.jetbrains.com/help/pycharm/profiler.html。

python 不僅是通用和 web 程式設計語言,由于 numpy、scipy、scikit-learn、matplotlib、jupyter 等庫和工具的加持,python 成為資料科學和機器學習領域的最優工具。有了這些強大工具,你還需要一個強大的 ide 來支援這些庫所具備的繪圖、分析等所有功能。

關于科學模式的更多詳情,參見 https://www.jetbrains.com/help/pycharm/matplotlib-support.html。

很多應用出現 bug 的一個常見原因是,開發環境和生産環境不同。盡管在大多數情況下,開發時完美複制生産環境并不現實,但力求實作完美複刻是值得追尋的目标。

在 pycharm 的幫助下,你可以使用另一台計算機(如 linux vm)上的解釋器對應用進行 debug。這樣,你就可以擁有與生産環境一樣的解釋器了,進而避免很多因開發環境和生産環境差異導緻的 bug。

詳情參見:jetbrains.com/help/pycharm/remote-debugging-with-product.html。

pycharm 是最好的 python 開發 ide 之一。它提供大量優勢,幫助執行例行任務,進而節約大量時間。學完本教程,現在你知道如何利用 pycharm 提高生産效率了嗎?