1. 程式人生 > >學Python程式設計的十大提升工具

學Python程式設計的十大提升工具

與其他大多數程式語言一樣,Python擁有強大的第三方支援,它們提供了各種各樣的工具。這些工具在建立應用程式的過程中能夠大大增強Python的功能。偵錯程式是一種工具,因為它是一種實用程式,而庫不是,庫是用來建立更好的應用程式的。

即使我們把工具和非工具(比如庫)區分開,也不能讓工具的數量明顯減少。Python有大量常規工具和特殊工具的支援,這些工具被分成以下13類:

自動化重構工具; Bug跟蹤工具; 配置和構建工具; 部署工具; 文件工具; 整合開發環境; Python偵錯程式; Python編輯器; Python Shell; Skeleton Builder工具; 測試軟體; 有用模組; 版本控制。

值得注意的是,Python DevelopmentTools頁面上的列表是不完整的。除此之外,你還可以在其他一些網頁中看到大量的Python工具。

今天非同步君挑選了幾個需要特別關注的工具進行講解。如果你對Python工具的內容感興趣,你可以自己去網上查詢一些其他工具學習一番。你可能會發現,有些自己想建立的工具其實早就有了,而且不止一種。

1 使用Roundup Issue Tracker跟蹤Bug

現在有很多bug跟蹤站點可供我們使用,比如:Github、Google Code、BitBucket、Launchpad。不過,這些公共站點用起來通常都沒有你自己定製的本地化Bug跟蹤軟體那樣方便。你可以在本地機器上選用多種跟蹤系統,但是Roundup Issue跟蹤器是其中更好的一個。Roundup可以執行在所有支援Python的平臺下,提供瞭如下基本功能:

Bug跟蹤; 管理TODO列表。 如果你願意在安裝上多下點功夫,你就可以獲得更多的功能,這些額外功能體現的正是Roundup和其他產品不同的地方。但是,要獲取這些功能,你可能需要安裝其他產品,比如資料庫管理系統(DBMS)。Roundup的產品說明中指出了你要安裝什麼以及它和哪些第三方產品是相容的。安裝完成後,你會獲得如下這些功能。

客戶支援,包含如下: 電話應答嚮導; 網路連結; 系統和開發問題跟蹤工具。 網際網路工程任務組(Internet Engineering Task Force,IETF)的問題管理。 銷售趨勢跟蹤。 會議論文投稿。 雙盲評審管理。 部落格(目前還很簡陋,以後會變得很強大)。

2 使用VirtualEnv建立虛擬環境

建立虛擬環境的理由很多,但主要原因還是為了創造一個安全、已知的測試環境。每次都使用相同的測試環境,這樣可以保證應用程式擁有穩定的測試環境,直到你在類似產品的環境中完成足夠的測試。VirtualEnv為我們提供了建立虛擬Python環境的方法,你可以使用它進行早期測試,或者診斷由環境原因引發的問題。請務必記住,你最少需要做3個標準級別的測試。

Bug:檢查程式中的錯誤。 效能:驗證程式是否滿足執行速度、可靠性、安全性方面的要求。 可用性:驗證程式是否符合使用者需求,是否能夠按照使用者期望的方式響應使用者輸入。 根據大多數Python應用程式的使用方式,Python應用程式在實際工作環境中通常不需要執行在虛擬環境下。大多數Python應用程式都需要訪問外部環境,但虛擬環境會阻止這種外部訪問行為。

永遠不要在生產伺服器上測試程式

一些開發人員常犯的一個錯誤是在生產伺服器上測試尚未釋出的程式,這使得使用者可以很容易地訪問到它。永遠不要在生產伺服器上測試你的程式,原因有很多,其中最重要的一個是這樣做會導致資料丟失。如果允許使用者訪問尚未正式釋出的程式,而這個程式又包含可能會損壞資料庫或其他資料來源的Bug,這樣就有可能造成資料的永久丟失或損壞。

你還要注意,你只有一次贏得別人好感的機會。許多軟體專案的失敗是因為使用者最終拋棄了它。即便應用程式是完整的,但是沒有人會使用它,因為使用者認為應用程式在某些方面存在缺陷。使用者心中只有一個目標,那就是儘快完成工作,然後回家。當用戶發現某個程式在浪費他們的時間時,他們就不會再使用它了。

此外,未釋出的應用程式有可能存在安全漏洞,心懷惡意的人可能利用這些漏洞非法訪問你的網路。如果你的門是開著的,任何人都能進來,那不管你的安全軟體有多棒都沒什麼用。當他們進來之後,你再想擺脫他們幾乎是不可能的,即使你真的擺脫了他們,但這時對資料的損害已經發生了。從安全漏洞恢復是很難的,有時甚至是不可能的。簡而言之,永遠不要在生產伺服器上測試你的應用程式,這樣做的成本太高了。

3 使用PyInstaller安裝你的應用程式

一般,使用者都不希望在應用程式安裝上花費太多時間,不管這個程式最終會給他們帶去多大的幫助都是如此。即使你可以讓使用者去嘗試安裝程式,但不太懂計算機的使用者也有可能會安裝失敗。簡而言之,你需要有一種萬無一失的方法,幫助使用者把程式順利地安裝到自己的計算機中。PyInstaller 可以幫你做到這一點,它會為你的應用程式生成了一個安裝包,使用者使用這個安裝包就可以很容易地把程式安裝到自己的系統中。

幸運的是,PyInstaller可以在所有支援Python的平臺上工作,所以你只需要一個工具就可以滿足所有安裝需求。另外,必要時,你還可以獲得特定平臺的支援。例如,在Windows平臺下,你可以建立有程式碼簽名的可執行檔案。Mac開發人員很喜歡PyInstaller為bundle提供了支援。大多數情況下,儘量避免使用特定於平臺的特性,除非你真的需要它們。當你使用了特定於某個平臺的特性時,安裝只能在這個平臺上才能成功。

不要使用孤立的工具

網路上有一些Python工具是孤立的,其開發者已不再支援它們。但有些開發人員仍然在使用這些工具,因為他們喜歡這些工具所支援的特性或工作方式。但是,這樣做是有風險的,因為你不能確定這個工具是否能和最新版本的Python協同工作。選擇工具時,要儘量選擇那些受生產廠商完全支援的工具。

如果你必須使用孤立的工具(例如做某個工作時只有孤立的工具可用),那請你確保所用的工具仍然有良好的社群支援。或許工具的生產商已經不再存在了,但至少在你需要支援時,有社群為你提供有用的資訊。請注意,使用那些不受支援的工具可能會浪費你大量的時間,因為它們可能無法正常工作了。 |

我們在網上找到的許多安裝工具都是特定於某個平臺的。例如,當你尋找一款用於建立可執行檔案的安裝工具時,你需要注意這個工具創建出的可執行檔案是不是特定於某個平臺的(至少在你指定的平臺上可以執行)。重要的是,你選用的安裝工具在任何地方都能正常工作,這樣就不會創建出使用者無法使用的安裝包。如果安裝包有問題,那不管你選用什麼樣的跨平臺語言都無濟於事。

4 使用pdoc建立開發人員文件

與應用程式有關的文件有兩種:使用者文件和開發人員文件。使用者文件介紹如何使用應用程式,而開發人員文件則描述應用程式如何工作。庫只需要一種文件,即開發者文件,而桌面應用程式則只需要使用者文件。但是,服務可能同時需要這兩種文件,這取決於使用者是誰以及服務如何組合在一起。大多數文件可能都會影響到開發人員,而pdoc是一個建立它的簡單解決方案。

pdoc實用工具使用你插入到程式碼中的文件字串和註釋來建立文件,其輸出是文字檔案或HTML文件。你還可以讓pdoc以Web伺服器的方式執行,這樣人們可以直接在瀏覽器中檢視文件。pdoc實際是epydoc的替代品,現在epydoc的發起人已經不再支援epydoc了。

什麼是文件字串?

文件字串是一種特殊註釋,使用三重引號括起,如下所示:

"""This is a docstring."""

你可以把文件字串和一個物件關聯起來,例如包、函式、類和方法。在Python中,你建立的任何程式碼物件都可以有一個文件字串。文件字串的目的是描述物件,因此要使用描述性的語句。

檢視文件字串最簡單的方法是在物件名稱之後使用doc()方法。比如,鍵入print(MyClass.doc())將顯示MyClass的文件字串。此外,你還可以使用幫助(比如help(MyClass))來訪問文件字串。好的文件字串用來指出物件做什麼,而非如何去做。

此外,第三方實用工具也可以使用文件字串。藉助於合適的實用工具,你可以為整個庫編寫文件,而不必親自動手編寫。你使用的實用工具會通過庫中的文件字串來建立文件。如此看來,即使文件字串和註釋有著不同的用途,但它們在Python程式碼中同樣重要。

5 使用Komodo Edit編寫程式程式碼

選擇IDE時,主要看開發者的需求、技能水平以及要建立的應用程式型別。具體到某類應用程式的開發,有些IDE的確要比其他的好用。對開發新手來說,最好用的IDE當數Komodo Edit。你可以免費下載這個IDE,它包含了豐富的特性,讓你獲得比使用IDLE更好的編碼體驗。下面是Komodo Edit提供的一些功能:

支援多種程式語言; 關鍵字自動補全; 縮排檢查; 專案支援,自動生成部分程式程式碼; 良好支援。 但是,Komodo Edit和其他IDE有個明顯的不同,那就是它提供了一個升級路徑。當你發現Komodo Edit無法再滿足你的需求時,你可以升級到Komodo IDE,Komodo IDE包含對許多專業級特性的支援,比如程式碼分析(檢查應用程式速度的功能)和資料庫瀏覽器(讓資料庫更易用)。

6 使用pydbgr除錯程式

高階IDE(如Komodo IDE)都會帶有完整的偵錯程式,就連Komodo Edit也帶有一個簡單的偵錯程式。但是,如果你選用的是體量更小、價格更便宜、功能更少的IDE,那你可能根本就看不到有偵錯程式存在。偵錯程式可以幫你找出程式中的錯誤並修復它們。偵錯程式越好,查詢和修復錯誤所需要的工作量就越少。如果你使用的程式碼編輯器不帶偵錯程式,那你一定要找個外部偵錯程式使用,比如pydbgr。

一款好的偵錯程式包含許多標準特性,比如程式碼著色(使用顏色來表示關鍵字之類的內容)。除此之外,不同調試器各自還有一些非標準特性,這使它們彼此不同。下面是pydbgr的一些標準和非標準特性,如果你用的程式碼編輯器沒有附帶偵錯程式,pydbgr會是一個不錯的選擇。

智慧求值:求值命令幫助我們瞭解執行某行程式碼時會發生什麼,當然指的是這行程式碼在程式中實際執行之前。它有助於我們進行假設分析,用以瞭解程式中有哪些地方可能會出現問題。

跨程序除錯:一般來說,我們只能除錯駐留在同一臺機器上的應用程式。實際上,偵錯程式是應用程式程序的一部分,這意味著偵錯程式本身可能會妨礙到除錯過程。為此,我們可以使用跨程序除錯,這樣偵錯程式就不會影響到應用程式,你甚至可以不必在與偵錯程式相同的機器上執行應用程式。 全面位元組碼檢查:有時,檢視程式碼轉換為位元組程式碼(Python直譯器真正理解的程式碼)的過程有助於我們解決棘手的問題。

事件過濾和跟蹤:當你的程式在偵錯程式中執行時,它會產生一些事件,這些事件可以幫助偵錯程式瞭解發生了什麼。比如,移動到下一行程式碼會產生一個事件,從函式呼叫返回會產生另一個事件,等等。藉助這個功能,我們可以控制偵錯程式如何跟蹤應用程式以及對哪些事件做出反應。 7 使用IPython進入互動環境 Python Shell可以很好地應用在許多互動任務中。但是,如果你使用過它,你可能已經發現它有一些缺陷。其中,最大的缺陷是Python Shell是純文字環境,你必須在其中鍵入命令來執行給定的任務。更高階一點的Shell,比如IPython,支援GUI介面,這使互動環境更友好,這樣你就不必記憶各種古怪的命令了。

其實,IPython不僅僅是一個簡單的Shell。它提供了一個環境,你可以在這個環境中以新的方式和Python進行互動,例如以圖形方式顯示你使用Python建立的公式的結果。此外,IPython還是一個容納其他語言的前端。IPython應用程式向後臺的真正的Shell傳送命令,因此你可以使用其他語言的Shell,比如Julia和Haskell。(即使你從未聽說過這些語言,也不必擔心。)

IPython最令人興奮的特性之一是它能夠在平行計算環境下工作。一般Shell都是單執行緒的,這意味著什麼平行計算都做不了,你甚至不能建立多執行緒環境。僅憑這個特性,IPython就值得你試一試。

8 使用PyUnit測試Python應用程式

某些時候,你需要測試一下自己的應用程式,以確保它們按照預期工作。測試時,你可以通過一次輸入一個命令並驗證結果來進行測試,或者將這個過程自動化。顯然,自動化這個方法會更好,因為你可不想把所有時間都花在測試上,連回家吃飯的時間都沒有了,而且手工測試非常非常慢(尤其是當你犯了錯誤時,這種情況肯定會發生)。PyUnit等工具極大地簡化了單元測試(對單個特性進行的測試)過程。

PyUnit的優點是允許你建立真實的Python程式碼來執行測試。簡單地說,你編寫的指令碼是另一個專門的程式,用於測試主應用程式是否有問題。

或許你會覺得指令碼(非你專門編寫的應用程式)中可能會有很多Bug。其實,測試指令碼一般都設計得非常簡單,這會大大減少指令碼中的錯誤,並讓指令碼中的錯誤很容易被發現。即便如此,錯誤有時還是會出現。因此,當你無法找到應用程式中的問題時,你就的確需要檢查一下指令碼了。

9 使用Isort整理程式碼

整理程式碼看上去像是一件很小的事,但是如果你不注意這一點,你的程式碼很可能會變得亂糟糟的,尤其是當你沒有把所有import語句按照字母順序放到檔案頂部時,程式碼看起來會更亂。在某些情況下,如果你的程式碼不夠整潔,你就很難(並非不可能)弄清楚它到底怎麼了。Isort實用程式只對import語句進行排序,並確保它們全部位於原始碼檔案的頂部,這看上去微不足道,但對你理解和修改原始碼有很大的幫助。

有時只要瞭解某個特定模組需要哪些模組,就可以幫助我們快速找出潛在的問題。例如,你的系統中安裝了某個老版本的模組,那瞭解應用程式都需要哪些模組就可以使查詢那個模組的過程變得更容易。

此外,在把應用程式分發給使用者時,瞭解應用程式需要哪些模組也很重要。只有使用者的系統中安裝了程式所需要的模組,才能確保程式按照預期執行。

10 使用Mercurial進行版本控制

你在學習本書的過程中建立的那些應用程式其實都不復雜。事實上,在你讀完這本書並轉向更高階的學習之後,你都不太可能需要版本控制。不過,當你進入一個有組織的開發環境中工作、實際開發滿足使用者需求的應用程式時,版本控制就變得非常重要。簡單地說,版本控制就是跟蹤釋出到實際生產環境中的不同程式版本,並記錄不同程式版本之間發生的變化。當你說你在使用MyApp 1.2時,你指的是MyApp應用程式的1.2版。為程式打版本標識很有意義,當程式修改了缺陷或進行了改進之後,版本標識能夠讓人們知道自己使用的是哪一個版本。

Python版本控制工具有很多種,其中比較有趣的工具是Mercurial。對於幾乎所有可執行Python的平臺,Mercurial都提供了相應版本,這樣在更換平臺時你就不必再擔心無法使用Mercurial了。(對於你使用的平臺,如果Mercurial沒有提供相應的可執行檔案,你可以從官方站點下載Mercurial原始碼自己構建一個。)

與其他產品不同,Mercurial是免費的。即便你打算以後改用其他更高階的產品,你也可以從使用Mercurial管理一個或兩個專案的過程中獲得有用的經驗。

原始碼管理(SCM)是指把應用程式的各個版本儲存在不同的地方,以便根據需要撤消或重做對原始碼所做的修改。對許多人來說,原始碼管理似乎是一項艱鉅的任務。Mercurial環境相當友好,你可以在其中學習SCM。當你需要返回到程式的舊版本或修復新版本中出現的問題時,應用程式各個版本的原始碼必須可用才行。

Mercurial最棒的地方在於它有一個很好的線上教程。學習SCM最好的方法是在你自己的機器上一步步地跟學,哪怕只是翻一翻這些材料也是很有用的。教程的第一部分是關於如何安裝Mercurial的。然後,教程講解如何建立儲存庫(儲存應用程式各個版本的地方),並在建立應用程式程式碼時使用儲存庫。學完這個教程之後,你會對原始碼控制的原理以及為什麼版本控制是應用程式開發的一個重要部分有很好的瞭解。

大家在學python的時候肯定會遇到很多難題,以及對於新技術的追求,這裡推薦一下我們的Python學習扣qun:784758214,這裡是python學習者聚集地!!同時,自己是一名高階python開發工程師,從基礎的python指令碼到web開發、爬蟲、django、資料探勘等,零基礎到專案實戰的資料都有整理。送給每一位python的小夥伴!每日分享一些學習的方法和需要注意的小細節