與其餘大多數編程語言同樣,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的。而後,教程講解如何建立存儲庫(存儲應用程序各個版本的地方),並在建立應用程序代碼時使用存儲庫。學完這個教程以後,你會對源代碼控制的原理以及爲何版本控制是應用程序開發的一個重要部分有很好的瞭解。