Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
下最流行的語言是Java和Python,但是程序員們最想了解和學(xué)習(xí)的語言則要屬Rust了。學(xué)習(xí)語言最重要的是選擇合適的材料,那么學(xué)習(xí)Rust的最佳途徑是啥呢?本文我們就來介紹一下。
Rust編程語言(doc.rust-lang.org/book/)是由Steve Klabnik和Carol Nichols編寫的一本免費書,是Rust學(xué)習(xí)入門必讀之書書。Rust編程語言是一本非常全面的文檔,它通過非常清晰的示例和一些有趣的項目來展示Rust語言的概念,書中的項目遍布每一個章節(jié),從命令行猜謎游戲到多線程Web服務(wù)器都有涉獵。作為一本開放書籍,本身還有Rust社區(qū)維護(hù),可以一直保持最新狀態(tài),永遠(yuǎn)不會過時,這對快速發(fā)展的語言來說尤為重要。 該書已經(jīng)有中文版的翻譯,但是建議最好結(jié)合原版一起學(xué)習(xí)。
《Rust實例教程》(Rust by example)是另一本很棒的官方書籍。該教程結(jié)構(gòu)上像一本書,但更像是個備忘錄。它分為小章節(jié)和子章節(jié)。每部分,可以在5分鐘內(nèi)完成閱讀和學(xué)習(xí),以了解基本的Rust概念。可以將其當(dāng)做一本參考資料,并且在難以記住某些特定細(xì)節(jié)(例如如何編寫單元測試或的確切語法是什么)時可以隨時查閱。該材料主要立足于代碼,可以通過實際的代碼來真正實踐,當(dāng)然很多代碼可以直接“拿來”使用。
Rustonomicon (doc.rust-lang.org/nomicon/)也是一本官方提供的開放書籍,適合那些已經(jīng)對Rust有一定的基礎(chǔ),很了解基礎(chǔ)代碼,并且確認(rèn)可以把握更多、充滿信心并想要學(xué)習(xí)Rust Unsafe黑暗技巧的人。Rust可能包含Unsafe特性,只適合于高級程序員和類庫作者使用,但是確實提供了更大程度的自由。它意味著編譯器需要執(zhí)行可能不安全的操作,如果不了解(不負(fù)責(zé)任)使用此功能,可能會帶一些問題。不安全的代碼不一定很糟糕,但是需要謹(jǐn)慎使用,本書將引導(dǎo)用戶了解開始編寫Unsafe Rust之前需要了解的所有細(xì)節(jié)。如果想避免出現(xiàn)不可把握的情況,請一定閱讀該手冊,記住那一句話“權(quán)力越大,責(zé)任也越大”!
《Rust設(shè)計模式》(Rust Design Patterns)也是一本開放書籍,著重于教給用戶Rust的慣用法。該書中探索了一些特定于Rust的概念,重新審視了經(jīng)典的行為、創(chuàng)造和結(jié)構(gòu)設(shè)計模式,使之適應(yīng)Rust的慣用語法。也借此機(jī)會探索了慣用的Rust模式,例如 RAII和NewType。在學(xué)習(xí)語言時候,蟲蟲認(rèn)為最重要的就是要“身臨其境”,即學(xué)習(xí)并用該語言的慣用語法來寫代碼,才能更加高效的學(xué)習(xí)高效的編程。而通常容易犯的一個錯誤就是“以此推彼”:“為什么Rust不支持xxx,java和python都有的”,如果這樣類比學(xué)習(xí)會非常苦惱,有些問題甚至是根本沒有答案。所有學(xué)習(xí)rust時候就忘記其他語言,而用rust通常是怎么寫的,怎么實現(xiàn)的,這樣就會一氣呵成,越來越順,而不是開頭就“卡殼”了。
Possible Rust是一個設(shè)計精美的語言站,談?wù)摗癛ust實際可能實現(xiàn)的事情”。主要提供兩個主要部分:指南和模式。指南旨在解釋有趣的Rust概念,例如外部函數(shù)接口(FFI),Traits,枚舉等,而“模式”部分則嘗試探索有趣的陷阱,例如 “無法創(chuàng)建特征對象時可以做什么” 。目前內(nèi)容還是有點稀少,但是該資源值得瀏覽并加入收藏,時常學(xué)習(xí)。
Easy Rust(dhghomon.github.io/easy_rust/),這是一本非常值得零基礎(chǔ)的人入門的教程。這是另一本開放書籍,它以一種簡單的方式解釋和處理Rust的概念,使它們更易于理解和理解,尤其是對于那些初次接觸Rust的人或來自其他高級語言的工程師。改善一些舉例和類比非常適用,會讓某些生澀的概念更好的理解,書中一些小例子也是非常好,比如對各種Rust類型的介紹例子,可以解決我們剛?cè)隦ust,不知道怎么下手寫代碼的情況。概述可以結(jié)合Rust官方的教程一起學(xué)習(xí)。喜歡看視頻學(xué)習(xí)(蟲蟲強烈不建議)的同學(xué)也有個好消息,就是該書配套的視頻教程也在油管上有了(youtube /playlist?list=PLfllocyHVgsRwLkTAhG0E-2QxCf-ozBkk)。
Learning Rust是有關(guān)Rust的另一個全面開放指南。該站分為幾個主要部分,介紹了Rust的基礎(chǔ)知識,還有一些更高級的概念,例如所有權(quán),借用,泛型和Traits等。該資源著重于提供簡單的說明,并通過廣泛涉獵豐富代碼示例集的Rust代碼來促進(jìn)學(xué)習(xí)。
Rust Cookbook自己定義為“一些簡單示例的集合,這些示例演示了使用Rust生態(tài)系統(tǒng)板條箱(crates,Rust的類庫)來完成常見編程任務(wù)的最佳實踐”。 Rust Cookbook也是一本開放書籍(使用mdbooks)構(gòu)建,因此可以作為開放源代碼項目完全使用。本書的重點是補充了上面已經(jīng)介紹的許多資源。它不嘗試探索語言的基礎(chǔ),而是采取實用的態(tài)度來應(yīng)對常見的日常問題,例如并發(fā),壓縮,加密和數(shù)據(jù)結(jié)構(gòu)。 對于這些領(lǐng)域中的每一個領(lǐng)域,它都提供了許多有趣的示例,并提出了一些通常用于解決這些問題的最常見的第三方庫。
too-many-lists(rust-unofficial.github.io/too-many-lists/fourth.html)材料很意義,它提供了大量有關(guān)的主題,包括不良集(Bad Stack),良好集(OK Stack),持續(xù)集(Persistent Stack)等等的鏈接。
這些主要是圍繞引用構(gòu)建的,對于已經(jīng)掌握一定Rust基礎(chǔ),然后可以通過這些主題解決日常codeing過程中遇到的很多問題和解決方法,通過一系列失敗的嘗試,將學(xué)到許多有關(guān)Rust和借用檢查等的細(xì)節(jié)。
如果初步對Rust的知識充滿信心,并且希望以實用的方式開始探索更高級的主題,則該材料是最佳參考資源。
Tim McNamara的《Rust in Action》(Manning出版),是最值得推薦的圖書之一。
Rust in Action立足于實戰(zhàn),通過構(gòu)建有趣的項目(例如浮點數(shù)抽象,CPU仿真器,自定義文件格式,鍵值存儲數(shù)據(jù)庫等)來講解Rust概念。
圖書已經(jīng)寫了很久,紙質(zhì)版本書籍馬上會發(fā)行。目前該書可以通過Manning MEAP程序購買(可以獲得數(shù)字版本和所有更新)。
《Zero to Production in Rust》(自出版)是一本關(guān)于Rust的后端Web開發(fā)得非常好的書。
Luca在這個項目上投入了大量時間和精力。目前由于本書尚在編寫中,因此可以在新章節(jié)可用時立即閱讀。很高興看到社區(qū)如何參與該項目,以幫助作者從本書中獲得最大收益。
作者在整本書中使用的特殊樣式。在每一章中,在編寫任何代碼之前,都會有一整節(jié)內(nèi)容涉及需求以及為什么我們真正需要構(gòu)建特定功能。然后,每段代碼都有其自己的測試,而更改實際上是通過嚴(yán)格的測試驅(qū)動方法引入的。對于技術(shù)書籍來說,這是非常不尋常的,但這實際上就是大家喜歡這本書的原因。閱讀時,似乎正在與產(chǎn)品經(jīng)理或團(tuán)隊負(fù)責(zé)人進(jìn)行對話,并且意識到實際上可以在工作中使用Rust,沒什么大不了的!
Luca正在整理一本圍繞一個主要示例的書:構(gòu)建電子郵件訂閱平臺。乍一看,人們可能會認(rèn)為這是一個非常簡單的示例,但實際上,該領(lǐng)域的復(fù)雜性足以填滿整本書,最重要的是,在此過程中學(xué)習(xí)Rust。
從本書中可以學(xué)到很多東西,不僅與Rust有關(guān),甚至與產(chǎn)品開發(fā)和良好的軟件工程實踐有關(guān)。
Jim Blandy,Jason Orendorff和Leonora FS Tindall編寫的《Rust編程》(O'Reilly)是最受歡迎的Rust書籍之一。從第一版的書中,可以看到這是一本非常扎實的書。第二版預(yù)計在2021年夏天出版。
在第一版中,有些章節(jié)(特別是在第一章中)有些難以理解,作者一直在傾聽讀者的反饋意見并確保第二版將要發(fā)布時付出了很多努力。更加精致和貼切。
Rust編程語言是我們在本文開頭討論的實際“官方”同名書籍的印刷版。除了可以享受閱讀印刷書籍(并希望為作者提供支持)之外,其他沒有什么可補充的,這是一本很棒的書!
如果想了解有關(guān)Rust的更多信息,為什么它是一種出色的語言,為什么以及何時變得不那么好,以及它如何變得更好,可以看看的Amos(fasterthanlime)的博客 。
Amos具有非常引人入勝的寫作風(fēng)格。 他可以寫很長的帖子,但是總是很有趣。
該博客中也提供了,可能大家都看過的一個教程《半小時了解Rust》。
Yoshua在JavaScript社區(qū)中一直是很有影響力的開發(fā)人員。他一直鼓舞人心,最近幾年中逐漸轉(zhuǎn)入到Rust,他一直在博客中記錄自己的Rust轉(zhuǎn)型之旅。
他的博客是學(xué)習(xí)異步Rust,流,迭代器等的好地方。Yoshua從事多個開源項目,并從總體上深入了解了異步的優(yōu)缺點。其中有個教程《Async HTTP》值得大家研讀。
史蒂夫·克拉伯尼克(Steve Klabnik)是Rust社區(qū)中最有影響力的人之一。社區(qū)中一些最具影響力的Rust帖子就是源于他的博客。在他的博客中,有很多關(guān)于軟件工程的內(nèi)容,以及其他語言及其問題(和解決方案)與Rust相比的更多內(nèi)容。 其中值得研讀的文章有《Rust has finally outgrown me》
如果喜歡數(shù)據(jù)庫,性能優(yōu)化,分布式系統(tǒng),請看這個博客。作者撰寫了有關(guān)低級問題,技巧和竅門,Linux等的文章。他有一個開源項目 Sled ,如果想嘗試使用嵌入式數(shù)據(jù)庫和Rust 是一個了不起的工具。
Luca Palmieri撰寫的學(xué)習(xí)之旅博客,是學(xué)習(xí)Rust一種寶貴資源。他在在撰寫的系列教程:《Rust從零到生產(chǎn)環(huán)境》(Zero to Production in Rust),一些些章節(jié)以博客文章的形式出版。Luca是一位非常多產(chǎn)的作家,確實有很多不錯的資料,主要是關(guān)于使用Rust進(jìn)行Web開發(fā)。
如果更喜歡通過視頻學(xué)習(xí),或者只是喜歡觀看視頻資料,則可以參考一些油管頻道和Twitch流,以及B站上
最值得推薦的油管Rust頻道是 Ryan Levick的Streaming Rust(youtube /channel/UCpeX4D-ArTrsqvhLapAHprQ)。Ryan是微軟的工程師,他一直在花費時間制作Rust視頻材料。其頻道內(nèi)容千差萬別,有適合初學(xué)者的介紹性視頻,也有更高級的視頻,如 static VS dynamic dispatch 或 FFI 。Ryan的教程擅長于解釋簡單和復(fù)雜的概念。每個視頻都是一點點的珍寶,示例無處不在。 他還在Twitch做直播教學(xué)。
Jon Gjengset是另一位出色的Rust主播,他的教程,言簡意賅,使復(fù)雜主題易于理解的能力。他目前有2個有關(guān)Rust的主要系列:
Crust of Rust:對于中級Rustucean來說是一個很好的系列,通過更高級的概念(例如迭代器,智能指針,變量生命周期等等)。
不安全紀(jì)事 :深入了解Rust unsafe的世界。
目前,不安全紀(jì)事 系列只有一個視頻,但是作者最近在Twitter上發(fā)布了內(nèi)容,期望他將更多的時間花在創(chuàng)建令人興奮的新內(nèi)容上。
Tim是《Rust in Action》的作者,他也是一位多產(chǎn)的視頻流媒體。他一直對Rust視頻系列進(jìn)行了出色的介紹,該系列名為 Learn Rust Programming。我們認(rèn)為該系列是從Rust開始的好地方。 我們最喜歡的視頻之一是Rust中的錯誤處理。他在油管和Twitch有教學(xué)專欄。
Genus-v programming是另一個很棒的YouTube頻道,其中包含一些有趣的Rust材料。它主要專注于用Rust進(jìn)行Web開發(fā),這是最值得學(xué)習(xí)的方面。毫無疑問,最喜歡的播放列表中的一個是 Rust網(wǎng)站開發(fā),它展示了如何使用Actix構(gòu)建GraphQL API和身份驗證服務(wù)器。
Systems with JT是Jonathan Turner的YouTube頻道。Jonathan是一個非?;钴S的Rust開發(fā)人員,他是Nushell的作者,當(dāng)然,在他的頻道中,他有很多關(guān)于Rust的視頻。Jonathan 最值得推薦的教程《how to create a line editor in Rust》系列。
非主流世界下鮮有的Rust語言視頻主播,雖然播放量都不咋高,但是聊甚于無,希望能再接再厲,有更好的教程和點播,Rust同學(xué)們路過時候不要錯過,給他們?nèi)B哦:
學(xué)習(xí)編程最重要的就是要實踐,通過學(xué)習(xí)和參與實際項目是學(xué)習(xí)編程的秘籍和捷徑,只親自上手操刀,才知道為啥要這個概念,為啥這種寫法可以提高效率等。通過學(xué)習(xí)Rust生態(tài)系統(tǒng)的一些優(yōu)秀的項目可以短時間內(nèi)快速提高我們的Rust功力:
Bat是cat命令的替代,但不光是簡單替換,可以實現(xiàn)語言的高亮顯示(非常漂亮)。
Clap是CLI幫助程序庫。
Tokio,Async-std 和 Smol 異步運行時框架。
Serde 序列化庫。
Rand 隨機(jī)數(shù)生成。
Chrono 日期和時間庫。
Amethyst和 Bevy 游戲開發(fā)框架。
mdbooks 通過markdown創(chuàng)建一本書。
TiKV 國產(chǎn)開源分布式數(shù)據(jù)Tidb的底層Key-Value 數(shù)據(jù)庫
以及其他更多(歡迎大家補充)。
源:機(jī)器之心
本文約7300字,建議閱讀8分鐘。
本文從 PyCharm 安裝到插件、外部工具、專業(yè)版功能等進(jìn)行了一一介紹,希望能夠幫助到大家。
PyCharm 是一種 Python IDE,可以幫助程序員節(jié)約時間,提高生產(chǎn)效率。那么具體如何使用呢?
小編之前也沒系統(tǒng)地介紹過 PyCharm,怎樣配置環(huán)境、怎樣 DeBug、怎樣同步 GitHub 等等可能都是通過經(jīng)驗或者摸索學(xué)會的。在本文中,我們并不會提供非常完善的指南,但是會介紹 PyCharm 最主要的一些能力,了解這些后,后面就需要我們在實踐中再具體學(xué)習(xí)了。
機(jī)器之心的讀者應(yīng)該非常了解 JetBrains 開發(fā)的 PyCharm 了,它差不多是 Python 最常用的 IDE。PyCharm 可以為我們節(jié)省大量時間,它能夠管理代碼,并完成大量其他任務(wù),如 debug 和可視化等。
本文將介紹:
本文假設(shè)讀者熟悉 Python 開發(fā),且計算機(jī)中已安裝某個版本的 Python。該教程將使用 Python 3.6 版本,屏幕截圖和 demo 均來自 macOS 系統(tǒng)。由于 PyCharm 可在所有主流平臺上運行,讀者在其他系統(tǒng)中會看到略微不同的 UI 元素,可能需要調(diào)整某些命令。
PyCharm 安裝
本文將使用 PyCharm Community Edition 2019.1 版本,該版本免費且可在所有主流平臺上使用。只有最后一部分PyCharm Professional 功能使用的是 PyCharm Professional Edition 2019.1 版本。
推薦使用 JetBrains Toolbox App 安裝 PyCharm。使用該 App,你可以安裝不同的 JetBrains 產(chǎn)品或者同一產(chǎn)品的不同版本,并在必要的情況下更新、回滾和輕松刪除任意工具。你還可以在恰當(dāng)?shù)?IDE 及版本中快速打開任意項目。
Toolbox App 安裝指南,參見:
JetBrains 官方文檔:https://www.jetbrains.com/help/pycharm/installation-guide.html#toolbox
該 App 會根據(jù)你的操作系統(tǒng)提供合適的安裝說明。如果它無法無法準(zhǔn)確識別系統(tǒng),你可以在右上角的下拉列表中找到合適的系統(tǒng)。
安裝成功后,啟動該 app 并接受用戶協(xié)議。在 Tools 選項下,你可以看到一個可用產(chǎn)品列表。從中找到 PyCharm Community,并點擊 Install。
好啦,現(xiàn)在你的機(jī)器上已經(jīng)安裝 PyCharm 了。如果不想使用 Toolbox app,你可以單獨安裝 PyCharm。
啟動 PyCharm,你將看到導(dǎo)入設(shè)置彈窗。PyCharm 會自動檢測出這是首次安裝,并為你選擇Do not import settings選項。點擊 OK,之后 PyCharm 會讓你選擇鍵盤映射(keymap scheme)。保留默認(rèn)設(shè)置,點擊右下角的Next: UI Themes:
PyCharm 將詢問選擇深色模式 Darcula 還是淺色模式。你可以選擇自己喜歡的模式,并點擊Next: Launcher Script:
本教程將使用深色模式 Darcula。
在下一個頁面上,直接保留默認(rèn)設(shè)置,并點擊Next: Featured plugins,這時 PyCharm 將展示可用插件列表。點擊Start using PyCharm,現(xiàn)在你可以寫代碼了!
在 PyCharm 中寫代碼
在 PyCharm 中,你可以在項目中執(zhí)行任意操作。因此,首先你需要創(chuàng)建一個項目。
安裝和打開 PyCharm 后,你會看到歡迎頁面。點擊Create New Project,出現(xiàn)New Project彈窗:
指定項目位置,打開 Project Interpreter 列表,選擇創(chuàng)建新的項目解釋器或者使用已有的解釋器。選擇New environment using,打開其右方的下拉列表,選擇 Virtualenv、Pipenv 或 Conda。這些工具可以為不同項目單獨創(chuàng)建 Python 環(huán)境,從而分別保存不同項目所需的依賴項。
你可以選擇其中任意一個,本教程使用的是 Virtualenv。選擇后,指定環(huán)境位置,從 Python 解釋器列表中選擇要安裝在系統(tǒng)中的 base interpreter。通常,保持默認(rèn)設(shè)置即可。下面有兩個可選框:在新環(huán)境中繼承全局包環(huán)境、令當(dāng)前環(huán)境可以用其它所有項目,兩個都不要選。
點擊右下角的Create,創(chuàng)建新項目:
屏幕上出現(xiàn)Tip of the Day彈窗,在每次啟動時 PyCharm 通過該彈窗提供 trick。關(guān)掉該彈窗。
現(xiàn)在我們可以開始新的 Python 程序了。如果你使用的是 Mac 系統(tǒng),使用 Cmd+N 鍵;如果你使用的是 Windows 或 Linux 系統(tǒng),使用 Alt+Ins 鍵。然后選擇 Python File。你也可以在菜單中選擇 File → New。將新文件命名為 guess_game.py 并點擊 OK。你將看到如下 PyCharm 窗口:
至于測試代碼,我們來快速寫一個簡單的猜謎游戲,即程序選擇一個數(shù)字讓用戶來猜,在每一次猜測時,程序?qū)⒏嬖V用戶他猜的數(shù)字比神秘數(shù)字大還是小,用戶猜中數(shù)字時游戲結(jié)束。以下是該游戲的代碼:
直接鍵入上述代碼,而不是復(fù)制粘貼。你會看到如下畫面:
如上圖所示,PyCharm 提供 Intelligent Coding Assistance 功能,可以執(zhí)行代碼補全、代碼檢查、錯誤高亮顯示和快速修復(fù)建議。比如鍵入 main 并點擊 tab 鍵,PyCharm 會自動補全整個 main 從句。
此外,如果你在條件句前忘記鍵入 if,在該句子最后增添.if 并點擊 Tab 鍵,PyCharm 將修復(fù)該 if 條件句。該用法同樣適用于 True.while。這即是 PyCharm 的 Postfix Completion 功能,它可以幫助用戶減少退格鍵使用次數(shù)。
在 PyCharm 中運行代碼
現(xiàn)在你已經(jīng)編碼完成該游戲,可以運行了。
該游戲程序有三種運行方式:
使用以上任一方式運行該程序,窗口底部會出現(xiàn)終端面板(Terminal pane),顯示你的代碼輸出結(jié)果:
你可以玩一下這個游戲,看看自己能否猜中數(shù)字。(專業(yè)建議:從 50 開始猜。)
在 PyCharm 中進(jìn)行代碼 debug
找到神秘數(shù)字了嗎?如果找到了,你可能會看到一些奇怪的東西:程序沒有打印出祝賀信息和顯示退出按鈕,而是重新開始了。這就是 bug 所在。要想發(fā)現(xiàn)程序重新開始的原因,你需要 debug。
首先,點擊第 8 行代碼左側(cè)的空白區(qū)域,設(shè)置斷點:
斷點即程序運行到這一行時會自動停止,你可以探索斷點處之后的代碼有什么錯誤。接下來,從以下三種方式中選擇一種開始 debug:
之后,你將看到底部出現(xiàn) Debug 窗口:
按照下列步驟執(zhí)行程序 debug:
恭喜你,bug 被修復(fù)了!
在 PyCharm 中進(jìn)行代碼測試
不經(jīng)單元測試的應(yīng)用都不可靠。PyCharm 可以幫助你快速舒適地寫單元測試并運行。默認(rèn)情況下,unittest 被用作測試運行器,而 PyCharm 還支持其他測試框架,如 pytest、nose、doctest、tox 和 trial。例如,你可以按照以下步驟為項目選擇 pytest 測試運行器:
本教程的示例將使用默認(rèn)測試運行器 unittest。
在同一個項目中,創(chuàng)建文件 calculator.py,并將以下 Calculator 類放入該文件:
PyCharm 使得為已有代碼創(chuàng)建測試變得輕而易舉。打開 calculator.py 文件,執(zhí)行以下步驟中的任意一個:
選擇Create New Test…,得到以下窗口:
Target directory、Test file name 和 Test class name 這三項均保留默認(rèn)設(shè)置。選中上圖中兩種需要測試的方法并點擊 OK。好了!PyCharm 自動創(chuàng)建文件 test_calculator.py,并在其中創(chuàng)建了以下 stub test:
使用以下方法中的任意一個運行測試:
你將看到底部出現(xiàn)測試窗口,所有測試均失?。?/p>
注意,左側(cè)是測試結(jié)果的層次結(jié)構(gòu),右側(cè)是終端的輸出。現(xiàn)在,將代碼更改成以下代碼,實現(xiàn) test_add:
重新運行測試,你會看到一個測試通過了,另一個則失敗。按照如下操作探索不同選項,來展示已通過測試和被忽略測試,按照字母順序?qū)y試進(jìn)行排序,以及按照時長對測試進(jìn)行排序:
注意,上圖中的 sleep(0.1) 方法的作用是使其中一個測試變慢,以便按時長對測試進(jìn)行排序。
在 PyCharm 中編輯已有項目
單文件項目非常適合作為示例,但你通常需要處理較大的項目。這部分將介紹如何使用 PyCharm 處理較大項目。
為了探索 PyCharm 以項目為中心的特征,你將使用 Alcazar web 框架(該框架用于學(xué)習(xí)目的)。
在本地復(fù)制該 repo(地址:https://realpython.com/optins/view/alcazar-web-framework/)
當(dāng)你在本地已有項目時,使用以下方法中的任意一個在 PyCharm 中打開項目:
之后,在計算機(jī)中找到包含該項目的文件夾,并打開。
如果該項目包含虛擬環(huán)境,PyCharm 將自動使用該虛擬環(huán)境,并將它作為項目解釋器。
如果你需要配置不同的虛擬環(huán)境 virtualenv,在 Mac 上打開 Preferences,或在 Windows 或 Linux 系統(tǒng)中使用 Ctrl+Alt+S 打開 Settings,找到 Project: ProjectName。打開下拉列表,選擇 Project Interpreter:
從下拉列表中選擇 virtualenv。如果沒有要選擇的項,則點擊下拉列表右方的設(shè)置按鈕選擇 Add…。其余步驟和創(chuàng)建新項目的步驟相同。
在 PyCharm 中搜索和導(dǎo)航
在大項目中,我們很難記住每個事物的位置,因此快速導(dǎo)航和搜索非常重要。PyCharm 可以提供這些功能。接下來,我們使用上一節(jié)中打開的項目,實踐以下快捷鍵:
導(dǎo)航可使用以下快捷鍵:
更多細(xì)節(jié),參見官方文檔:
https://www.jetbrains.com/help/pycharm/tutorial-exploring-navigation-and-search.html
PyCharm 中的版本控制
版本控制系統(tǒng)(如 Git 和 Mercurial)是現(xiàn)代軟件開發(fā)世界中最重要的工具之一。因此,IDE 必須支持版本控制。PyCharm 在這方面做得很好,它集成了大量流行的版本控制系統(tǒng),如 Git(和 Github (https://github.com/))、Mercurial、Perforce 和 Subversion。
注:以下示例中使用的版本控制系統(tǒng)為 Git。
配置版本控制系統(tǒng)(VCS)
要想實現(xiàn) VCS 集成,你需要在頂部菜單點擊 VCS → VCS Operations Popup…,或者在 Mac 系統(tǒng)中使用 Ctrl+V 鍵,在 Windows 或 Linux 系統(tǒng)中使用 Alt+` 鍵。選擇 Enable Version Control Integration…,你將看到以下窗口:
從下拉列表中選擇 Git,點擊 OK,這樣你就為項目設(shè)置好了 VCS。(注意,如果你打開的已有項目已經(jīng)具備版本控制系統(tǒng),PyCharm 將會發(fā)現(xiàn)并自動使用該版本控制系統(tǒng)。)
這時如果你前往 VCS Operations Popup…,你會發(fā)現(xiàn)一個不同的彈窗,它具備選項 git add、git stash、git branch、git commit、git push 等等:
如果你找不到所需要的選項,你可以在頂部菜單中點擊 VCS,選擇 Git,在這里你可以創(chuàng)建和查看 pull request。
提交和沖突處理
這是 PyCharm 中 VCS 集成的兩大特征,我個人經(jīng)常使用并且非常喜歡。假如你完成了工作,打算提交,前往 VCS → VCS Operations Popup… → Commit…,或者在 Mac 系統(tǒng)中使用 Cmd+K 鍵,在 Windows 或 Linux 系統(tǒng)中使用 Ctrl+K 鍵。你將看到如下窗口:
在該窗口中,你可以:
是不是感覺很神奇很迅速?特別是如果你以前經(jīng)常通過命令行手動執(zhí)行這些任務(wù)時。
團(tuán)隊合作中會出現(xiàn)合并沖突(merge conflict)。當(dāng)一個人對你正在處理的文件提交更改時,你們二人更改了同一行導(dǎo)致更改重疊,這時 VCS 無法決定選擇你的更改還是隊友的更改。那么你可以使用以下箭頭和符號來解決這個問題:
看起來很奇怪,我們很難分辨應(yīng)該刪除哪些更改、保留哪些更改。不要怕,PyCharm 來了!它可以用更好、更簡潔的方法解決沖突。在頂部菜單中前往 VCS,選擇 Git,然后選擇 Resolve conflicts…。選擇存在沖突的文件,點擊 Merge,出現(xiàn)以下窗口:
在左側(cè)列中,你可以查看自己做的更改。在右側(cè)列中,可以查看隊友做的更改。而中間列則顯示結(jié)果。存在沖突的代碼行被高亮顯示,你可以在它們旁邊看到 X 和 >>/<<。點擊箭頭表示接受更改,點擊 X 則表示拒絕更改。解決所有沖突后,點擊 Apply 按鈕:
在上圖中,對于第一個沖突行,作者選擇拒絕自己的更改,接受隊友的更改。而在第二個沖突行中,作者接受了自己的更改,拒絕了隊友的更改。
使用 PyCharm 中的 VCS 集成還可以執(zhí)行很多操作。詳情參見
https://www.jetbrains.com/help/pycharm/version-control-integration.html
在 PyCharm 中使用插件和外部工具
在 PyCharm 中你可以找到開發(fā)所需的幾乎所有功能。如果沒找到,那么很可能存在一個插件,向 PyCharm 提供你需要的功能。例如,它們可以:
例如,IdeaVim 插件向 PyCharm 添加 Vim 模擬。如果你喜歡 Vim,這個插件可以實現(xiàn)不錯的結(jié)合。
Material Theme UI 插件可將 PyCharm 的外觀改變?yōu)?Material Design 的外觀:
Vue.js 插件使 PyCharm 支持 Vue.js 項目。Markdown 插件使得在 IDE 內(nèi)可以編輯 Markdown 文件,并實時預(yù)覽渲染后的 HTML。
在 Mac 系統(tǒng)上點擊 Preferences → Plugins,在 Windows 或 Linux 系統(tǒng)中點擊 Settings → Plugins,你可以在 Marketplace 標(biāo)簽下找到和安裝所有可用插件:
如果仍然沒找到所需插件,你甚至可以自己開發(fā)一個。
如果你找不到合適的插件,又不想自己開發(fā),因為 PyPI 上有可用的包,你可以將這個包作為外部工具添加到 PyCharm。以代碼分析器 Flake8 為例。
首先,在所選 Terminal app 中鍵入 pip install flake8,從而在虛擬環(huán)境中安裝 Flake8?;蛘咭部梢允褂?PyCharm 集成的 Terminal:
在 Mac 系統(tǒng)上點擊 Preferences → Tools,在 Windows 或 Linux 系統(tǒng)中點擊 Settings → Tools,選擇 External Tools。然后點擊底部 (1) 處的 + 按鈕。在彈出的窗口中,輸入細(xì)節(jié)并在兩個窗口中點擊 OK,如下圖所示:
上圖中,Program (2) 指 Flake8,你可以在虛擬環(huán)境文件夾(bin)中找到它。Arguments (3) 表示你想用 Flake8 分析的文件。Working directory 表示項目目錄。
你可以把這里所有項的絕對路徑寫死,但這就意味著你無法在其他項目中使用該外部工具,只能在一個項目中針對一個文件使用該工具。
因此你需要使用 Macros。它是$name$格式的變量,根據(jù)語境而變化。例如,當(dāng)你編輯 first.py 時,$FileName$ 為 first.py,當(dāng)你編輯 second.py 時,$FileName$ 為 second.py。你可以查看它們的列表,點擊 Insert Macro… 按鈕將其中一個插入。此處你使用了 macros,它們的值會根據(jù)你目前處理的項目而改變,F(xiàn)lake8 將繼續(xù)準(zhǔn)確執(zhí)行其工作。
要想使用它,你需要創(chuàng)建文件 example.py,并在其中寫入以下代碼:
上述代碼故意破壞了 Flake8 的一些規(guī)則。右鍵單擊文件背景,選擇 External Tools → Flake8。Flake8 分析結(jié)果將出現(xiàn)在窗口底部:
為了使效果更好,你可以為其添加快捷鍵。在 Mac 系統(tǒng)中選擇 Preferences,在 Windows 或 Linux 系統(tǒng)中選擇 Settings。然后,點擊 Keymap → External Tools → External Tools。雙擊 Flake8,選擇 Add Keyboard Shortcut,出現(xiàn)以下窗口:
上圖中,快捷鍵是 Ctrl+Alt+A(本教程使用該快捷鍵)。你可以在文本框中添加喜歡的快捷鍵,然后在兩個窗口中點擊 OK。然后,你就可以用該快捷鍵,在 Flake8 的幫助下分析目前在處理的文件了。
PyCharm Professional 功能
PyCharm Professional 是 PyCharm 的付費版本,具備更多開箱即用的功能和集成。這部分將概覽其主要功能,以及官方文檔鏈接(其中詳細(xì)介紹了每一項功能)。記住,以下功能在 PyCharm Community 版本中均不可用。
Django 支持
Django 是最流行和最受喜愛的 Python web 框架,PyCharm 對 Django 提供廣泛的支持。要確保對 Django 的支持,需要執(zhí)行以下步驟:
現(xiàn)在確保了對 Django 的支持,你在 PyCharm 中的 Django 開發(fā)之旅將輕松很多。具體而言在創(chuàng)建項目時,你會得到一個專用的 Django 項目類型。這表示,當(dāng)你選擇該類型時,你將擁有所有必要文件和設(shè)置。這等同于使用 django-admin startproject mysite。
你也可以在 PyCharm 內(nèi)直接運行 manage.py 命令。目前支持的 Django 模板,包括以下一些:
除此之外,我們還可以在其他 Django 部分(如視圖、URL 和模型)中執(zhí)行代碼補全、對 Django ORM 提供代碼追蹤支持(code insight support)、對 Django 模型提供模型依賴項關(guān)系圖。
更多細(xì)節(jié),參見官方文檔:
https://www.jetbrains.com/help/pycharm/django-support7.html
數(shù)據(jù)庫支持
現(xiàn)代數(shù)據(jù)庫開發(fā)是一個復(fù)雜的任務(wù),需要多個支持系統(tǒng)和工作流。這也是 JetBrains 開發(fā)獨立 IDE DataGrip 的原因。DataGrip 是獨立于 PyCharm 的產(chǎn)品,二者的應(yīng)用場景和授權(quán)都不相同。
但幸運的是,通過 Database tools and SQL 插件(該插件默認(rèn)開啟),PyCharm 可以支持 DataGrip 中的所有特性。在該插件的幫助下,你可以查詢、創(chuàng)建和管理數(shù)據(jù)庫,不管數(shù)據(jù)庫在本地、服務(wù)器,還是在云端。該插件支持 MySQL、PostgreSQL、Microsoft SQL Server、SQLite、MariaDB、Oracle、Apache Cassandra 等。
關(guān)于該插件的更多用途,請查看文檔:
https://www.jetbrains.com/help/pycharm/relational-databases.html
線程并發(fā)可視化(Thread Concurrency Visualization)
Django Channels、asyncio 和近期框架(如 Starlette (https://www.starlette.io/))表明異步 Python 編程正逐漸成為趨勢。異步編程具備很多好處,但很難寫,也很難 debug。在此類案例中,Thread Concurrency Visualization 就是醫(yī)生,幫助你全面管理多線程應(yīng)用并進(jìn)行優(yōu)化。
更多細(xì)節(jié),參見文檔:
https://www.jetbrains.com/help/pycharm/thread-concurrency-visualization.html
Profiler
說到優(yōu)化,profiling 是另一種代碼優(yōu)化方法。profiling 可以幫助你查看代碼的哪一部分占用了最多的執(zhí)行時間。profiler 運行的優(yōu)先級如下:
1. vmprof
2. yappi
3. cProfile
如果你沒有安裝 vmprof 或 yappi,則運行標(biāo)準(zhǔn) cProfile。更多細(xì)節(jié),參見:
https://www.jetbrains.com/help/pycharm/profiler.html
科學(xué)模式
Python 不僅是通用和 web 編程語言,由于 NumPy、SciPy、scikit-learn、Matplotlib、Jupyter 等庫和工具的加持,Python 成為數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)領(lǐng)域的最優(yōu)工具。有了這些強大工具,你還需要一個強大的 IDE 來支持這些庫所具備的繪圖、分析等所有功能。
關(guān)于科學(xué)模式的更多詳情,參見
https://www.jetbrains.com/help/pycharm/matplotlib-support.html
遠(yuǎn)程開發(fā)
很多應(yīng)用出現(xiàn) bug 的一個常見原因是,開發(fā)環(huán)境和生產(chǎn)環(huán)境不同。盡管在大多數(shù)情況下,開發(fā)時完美復(fù)制生產(chǎn)環(huán)境并不現(xiàn)實,但力求實現(xiàn)完美復(fù)刻是值得追尋的目標(biāo)。
在 PyCharm 的幫助下,你可以使用另一臺計算機(jī)(如 Linux VM)上的解釋器對應(yīng)用進(jìn)行 debug。這樣,你就可以擁有與生產(chǎn)環(huán)境一樣的解釋器了,從而避免很多因開發(fā)環(huán)境和生產(chǎn)環(huán)境差異導(dǎo)致的 bug。
詳情參見:
https://www.jetbrains.com/help/pycharm/remote-debugging-with-product.html
結(jié)論
PyCharm 是最好的 Python 開發(fā) IDE 之一。它提供大量優(yōu)勢,幫助執(zhí)行例行任務(wù),從而節(jié)約大量時間。學(xué)完本教程,現(xiàn)在你知道如何利用 PyCharm 提高生產(chǎn)效率了嗎?
原文地址:https://realpython.com/pycharm-guide/
編輯:王菁
校對:林亦霖
— 完 —
關(guān)注清華-青島數(shù)據(jù)科學(xué)研究院官方微信公眾平臺“THU數(shù)據(jù)派”及姊妹號“數(shù)據(jù)派THU”獲取更多講座福利及優(yōu)質(zhì)內(nèi)容。
猜謎謠》
*請認(rèn)真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。