與其他大多數(shù)編程語言一樣,Python擁有強(qiáng)大的第三方支持,它們提供了各種各樣的工具。這些工具在創(chuàng)建應(yīng)用程序的過程中能夠大大增強(qiáng)Python的功能。調(diào)試器是一種工具,因?yàn)樗且环N實(shí)用程序,而庫不是,庫是用來創(chuàng)建更好的應(yīng)用程序的。 即使我們把工具和非工具(比如庫)區(qū)分開,也不能讓工具的數(shù)量明顯減少。Python有大量常規(guī)工具和特殊工具的支持,這些工具被分成以下13類:
值得注意的是,Python DevelopmentTools頁面上的列表是不完整的。除此之外,你還可以在其他一些網(wǎng)頁中看到大量的Python工具。 今天異步君挑選了幾個需要特別關(guān)注的工具進(jìn)行講解。如果你對Python工具的內(nèi)容感興趣,你可以自己去網(wǎng)上查找一些其他工具學(xué)習(xí)一番。你可能會發(fā)現(xiàn),有些自己想創(chuàng)建的工具其實(shí)早就有了,而且不止一種。 使用Roundup Issue Tracker跟蹤Bug 現(xiàn)在有很多bug跟蹤站點(diǎn)可供我們使用,比如:Github、Google Code、BitBucket、Launchpad。不過,這些公共站點(diǎn)用起來通常都沒有你自己定制的本地化Bug跟蹤軟件那樣方便。你可以在本地機(jī)器上選用多種跟蹤系統(tǒng),但是Roundup Issue跟蹤器是其中更好的一個。Roundup可以運(yùn)行在所有支持Python的平臺下,提供了如下基本功能:
如果你愿意在安裝上多下點(diǎn)功夫,你就可以獲得更多的功能,這些額外功能體現(xiàn)的正是Roundup和其他產(chǎn)品不同的地方。但是,要獲取這些功能,你可能需要安裝其他產(chǎn)品,比如數(shù)據(jù)庫管理系統(tǒng)(DBMS)。Roundup的產(chǎn)品說明中指出了你要安裝什么以及它和哪些第三方產(chǎn)品是兼容的。安裝完成后,你會獲得如下這些功能。
使用VirtualEnv創(chuàng)建虛擬環(huán)境 創(chuàng)建虛擬環(huán)境的理由很多,但主要原因還是為了創(chuàng)造一個安全、已知的測試環(huán)境。每次都使用相同的測試環(huán)境,這樣可以保證應(yīng)用程序擁有穩(wěn)定的測試環(huán)境,直到你在類似產(chǎn)品的環(huán)境中完成足夠的測試。VirtualEnv為我們提供了創(chuàng)建虛擬Python環(huán)境的方法,你可以使用它進(jìn)行早期測試,或者診斷由環(huán)境原因引發(fā)的問題。請務(wù)必記住,你最少需要做3個標(biāo)準(zhǔn)級別的測試。
根據(jù)大多數(shù)Python應(yīng)用程序的使用方式,Python應(yīng)用程序在實(shí)際工作環(huán)境中通常不需要運(yùn)行在虛擬環(huán)境下。大多數(shù)Python應(yīng)用程序都需要訪問外部環(huán)境,但虛擬環(huán)境會阻止這種外部訪問行為。
使用PyInstaller安裝你的應(yīng)用程序 一般,用戶都不希望在應(yīng)用程序安裝上花費(fèi)太多時間,不管這個程序最終會給他們帶去多大的幫助都是如此。即使你可以讓用戶去嘗試安裝程序,但不太懂計(jì)算機(jī)的用戶也有可能會安裝失敗。簡而言之,你需要有一種萬無一失的方法,幫助用戶把程序順利地安裝到自己的計(jì)算機(jī)中。PyInstaller 可以幫你做到這一點(diǎn),它會為你的應(yīng)用程序生成了一個安裝包,用戶使用這個安裝包就可以很容易地把程序安裝到自己的系統(tǒng)中。 幸運(yùn)的是,PyInstaller可以在所有支持Python的平臺上工作,所以你只需要一個工具就可以滿足所有安裝需求。另外,必要時,你還可以獲得特定平臺的支持。例如,在Windows平臺下,你可以創(chuàng)建有代碼簽名的可執(zhí)行文件。Mac開發(fā)人員很喜歡PyInstaller為bundle提供了支持。大多數(shù)情況下,盡量避免使用特定于平臺的特性,除非你真的需要它們。當(dāng)你使用了特定于某個平臺的特性時,安裝只能在這個平臺上才能成功。
我們在網(wǎng)上找到的許多安裝工具都是特定于某個平臺的。例如,當(dāng)你尋找一款用于創(chuàng)建可執(zhí)行文件的安裝工具時,你需要注意這個工具創(chuàng)建出的可執(zhí)行文件是不是特定于某個平臺的(至少在你指定的平臺上可以運(yùn)行)。重要的是,你選用的安裝工具在任何地方都能正常工作,這樣就不會創(chuàng)建出用戶無法使用的安裝包。如果安裝包有問題,那不管你選用什么樣的跨平臺語言都無濟(jì)于事。 使用pdoc創(chuàng)建開發(fā)人員文檔 與應(yīng)用程序有關(guān)的文檔有兩種:用戶文檔和開發(fā)人員文檔。用戶文檔介紹如何使用應(yīng)用程序,而開發(fā)人員文檔則描述應(yīng)用程序如何工作。庫只需要一種文檔,即開發(fā)者文檔,而桌面應(yīng)用程序則只需要用戶文檔。但是,服務(wù)可能同時需要這兩種文檔,這取決于用戶是誰以及服務(wù)如何組合在一起。大多數(shù)文檔可能都會影響到開發(fā)人員,而pdoc是一個創(chuàng)建它的簡單解決方案。 pdoc實(shí)用工具使用你插入到代碼中的文檔字符串和注釋來創(chuàng)建文檔,其輸出是文本文件或HTML文檔。你還可以讓pdoc以Web服務(wù)器的方式運(yùn)行,這樣人們可以直接在瀏覽器中查看文檔。pdoc實(shí)際是epydoc的替代品,現(xiàn)在epydoc的發(fā)起人已經(jīng)不再支持epydoc了。
使用Komodo Edit編寫程序代碼 選擇IDE時,主要看開發(fā)者的需求、技能水平以及要創(chuàng)建的應(yīng)用程序類型。具體到某類應(yīng)用程序的開發(fā),有些IDE的確要比其他的好用。對開發(fā)新手來說,最好用的IDE當(dāng)數(shù)Komodo Edit。你可以免費(fèi)下載這個IDE,它包含了豐富的特性,讓你獲得比使用IDLE更好的編碼體驗(yàn)。下面是Komodo Edit提供的一些功能:
但是,Komodo Edit和其他IDE有個明顯的不同,那就是它提供了一個升級路徑。當(dāng)你發(fā)現(xiàn)Komodo Edit無法再滿足你的需求時,你可以升級到Komodo IDE,Komodo IDE包含對許多專業(yè)級特性的支持,比如代碼分析(檢查應(yīng)用程序速度的功能)和數(shù)據(jù)庫瀏覽器(讓數(shù)據(jù)庫更易用)。 使用pydbgr調(diào)試程序 高端IDE(如Komodo IDE)都會帶有完整的調(diào)試器,就連Komodo Edit也帶有一個簡單的調(diào)試器。但是,如果你選用的是體量更小、價格更便宜、功能更少的IDE,那你可能根本就看不到有調(diào)試器存在。調(diào)試器可以幫你找出程序中的錯誤并修復(fù)它們。調(diào)試器越好,查找和修復(fù)錯誤所需要的工作量就越少。如果你使用的代碼編輯器不帶調(diào)試器,那你一定要找個外部調(diào)試器使用,比如pydbgr。 一款好的調(diào)試器包含許多標(biāo)準(zhǔn)特性,比如代碼著色(使用顏色來表示關(guān)鍵字之類的內(nèi)容)。除此之外,不同調(diào)試器各自還有一些非標(biāo)準(zhǔn)特性,這使它們彼此不同。下面是pydbgr的一些標(biāo)準(zhǔn)和非標(biāo)準(zhǔn)特性,如果你用的代碼編輯器沒有附帶調(diào)試器,pydbgr會是一個不錯的選擇。
使用IPython進(jìn)入交互環(huán)境 Python Shell可以很好地應(yīng)用在許多交互任務(wù)中。但是,如果你使用過它,你可能已經(jīng)發(fā)現(xiàn)它有一些缺陷。其中,最大的缺陷是Python Shell是純文本環(huán)境,你必須在其中鍵入命令來執(zhí)行給定的任務(wù)。更高級一點(diǎn)的Shell,比如IPython,支持GUI界面,這使交互環(huán)境更友好,這樣你就不必記憶各種古怪的命令了。 其實(shí),IPython不僅僅是一個簡單的Shell。它提供了一個環(huán)境,你可以在這個環(huán)境中以新的方式和Python進(jìn)行交互,例如以圖形方式顯示你使用Python創(chuàng)建的公式的結(jié)果。此外,IPython還是一個容納其他語言的前端。IPython應(yīng)用程序向后臺的真正的Shell發(fā)送命令,因此你可以使用其他語言的Shell,比如Julia和Haskell。(即使你從未聽說過這些語言,也不必?fù)?dān)心。) IPython最令人興奮的特性之一是它能夠在并行計(jì)算環(huán)境下工作。一般Shell都是單線程的,這意味著什么并行計(jì)算都做不了,你甚至不能創(chuàng)建多線程環(huán)境。僅憑這個特性,IPython就值得你試一試。 使用PyUnit測試Python應(yīng)用程序 某些時候,你需要測試一下自己的應(yīng)用程序,以確保它們按照預(yù)期工作。測試時,你可以通過一次輸入一個命令并驗(yàn)證結(jié)果來進(jìn)行測試,或者將這個過程自動化。顯然,自動化這個方法會更好,因?yàn)槟憧刹幌氚阉袝r間都花在測試上,連回家吃飯的時間都沒有了,而且手工測試非常非常慢(尤其是當(dāng)你犯了錯誤時,這種情況肯定會發(fā)生)。PyUnit等工具極大地簡化了單元測試(對單個特性進(jìn)行的測試)過程。 PyUnit的優(yōu)點(diǎn)是允許你創(chuàng)建真實(shí)的Python代碼來執(zhí)行測試。簡單地說,你編寫的腳本是另一個專門的程序,用于測試主應(yīng)用程序是否有問題。 或許你會覺得腳本(非你專門編寫的應(yīng)用程序)中可能會有很多Bug。其實(shí),測試腳本一般都設(shè)計(jì)得非常簡單,這會大大減少腳本中的錯誤,并讓腳本中的錯誤很容易被發(fā)現(xiàn)。即便如此,錯誤有時還是會出現(xiàn)。因此,當(dāng)你無法找到應(yīng)用程序中的問題時,你就的確需要檢查一下腳本了。 使用Isort整理代碼 整理代碼看上去像是一件很小的事,但是如果你不注意這一點(diǎn),你的代碼很可能會變得亂糟糟的,尤其是當(dāng)你沒有把所有import語句按照字母順序放到文件頂部時,代碼看起來會更亂。在某些情況下,如果你的代碼不夠整潔,你就很難(并非不可能)弄清楚它到底怎么了。Isort實(shí)用程序只對import語句進(jìn)行排序,并確保它們?nèi)课挥谠创a文件的頂部,這看上去微不足道,但對你理解和修改源代碼有很大的幫助。 有時只要了解某個特定模塊需要哪些模塊,就可以幫助我們快速找出潛在的問題。例如,你的系統(tǒng)中安裝了某個老版本的模塊,那了解應(yīng)用程序都需要哪些模塊就可以使查找那個模塊的過程變得更容易。 此外,在把應(yīng)用程序分發(fā)給用戶時,了解應(yīng)用程序需要哪些模塊也很重要。只有用戶的系統(tǒng)中安裝了程序所需要的模塊,才能確保程序按照預(yù)期運(yùn)行。 使用Mercurial進(jìn)行版本控制 你在學(xué)習(xí)本書的過程中創(chuàng)建的那些應(yīng)用程序其實(shí)都不復(fù)雜。事實(shí)上,在你讀完這本書并轉(zhuǎn)向更高級的學(xué)習(xí)之后,你都不太可能需要版本控制。不過,當(dāng)你進(jìn)入一個有組織的開發(fā)環(huán)境中工作、實(shí)際開發(fā)滿足用戶需求的應(yīng)用程序時,版本控制就變得非常重要。簡單地說,版本控制就是跟蹤發(fā)布到實(shí)際生產(chǎn)環(huán)境中的不同程序版本,并記錄不同程序版本之間發(fā)生的變化。當(dāng)你說你在使用MyApp 1.2時,你指的是MyApp應(yīng)用程序的1.2版。為程序打版本標(biāo)識很有意義,當(dāng)程序修改了缺陷或進(jìn)行了改進(jìn)之后,版本標(biāo)識能夠讓人們知道自己使用的是哪一個版本。 Python版本控制工具有很多種,其中比較有趣的工具是Mercurial。對于幾乎所有可運(yùn)行Python的平臺,Mercurial都提供了相應(yīng)版本,這樣在更換平臺時你就不必再擔(dān)心無法使用Mercurial了。(對于你使用的平臺,如果Mercurial沒有提供相應(yīng)的可執(zhí)行文件,你可以從官方站點(diǎn)下載Mercurial源代碼自己構(gòu)建一個。) 與其他產(chǎn)品不同,Mercurial是免費(fèi)的。即便你打算以后改用其他更高級的產(chǎn)品,你也可以從使用Mercurial管理一個或兩個項(xiàng)目的過程中獲得有用的經(jīng)驗(yàn)。 源代碼管理(SCM)是指把應(yīng)用程序的各個版本存儲在不同的地方,以便根據(jù)需要撤消或重做對源代碼所做的修改。對許多人來說,源代碼管理似乎是一項(xiàng)艱巨的任務(wù)。Mercurial環(huán)境相當(dāng)友好,你可以在其中學(xué)習(xí)SCM。當(dāng)你需要返回到程序的舊版本或修復(fù)新版本中出現(xiàn)的問題時,應(yīng)用程序各個版本的源代碼必須可用才行。 Mercurial最棒的地方在于它有一個很好的在線教程。學(xué)習(xí)SCM最好的方法是在你自己的機(jī)器上一步步地跟學(xué),哪怕只是翻一翻這些材料也是很有用的。教程的第一部分是關(guān)于如何安裝Mercurial的。然后,教程講解如何創(chuàng)建存儲庫(存儲應(yīng)用程序各個版本的地方),并在創(chuàng)建應(yīng)用程序代碼時使用存儲庫。學(xué)完這個教程之后,你會對源代碼控制的原理以及為什么版本控制是應(yīng)用程序開發(fā)的一個重要部分有很好的了解。 |
|