Python web 開發工具箱
工欲善其事,必先利其器(裝逼工具)
- Pycharm。專業的python IDE,功能很強大,特別喜歡它的代碼merge工具,不想被編輯器折騰死的推薦直接使用,五星級推薦。(除了內存佔用大點)
- vim。本人比較喜歡的編輯器,平常寫代碼、博客、文檔等使用頻繁,配上各種插件編輯效率很高。http://vimawesome.com/ 可以到這個上面安裝排名靠前的那些插件,能夠大大提高編輯效率,部分替代IDE(本人裝了六七十個插件,滿足各種變態的編輯需求)。其他優秀的編輯器sublime,atom,vscode,emacs等不熟,根據個人喜好來吧,不過vim等終端友好的編輯器方便在伺服器上直接寫代碼,缺點就是補全和跳轉支持不完善,也可以 Pycharm 和 vim插件配合。(在google搜索python awesome等可以在github上搜索到一些awesome項目,總結了該語言很多技術工具)。網上還有很多牛人開源了自己的 dotfiles,我們可以參考下別人的 vimrc 配置。
- meld/vimdiff: 文本比對工具。
- tmux。比screen好用,可以用來分屏,託管進程等,伺服器端必備神器,ubuntu下基本就不用使用terminator之類的分屏工具了。最近看youtube視頻還發現有人在伺服器上使用tmux和vim結對編程,兩個人同時attach到一個session里,基情四射。
- oh-my-zsh。替代原生的bash shell,提供了好多方便的特性和漂亮主題。linux/mac下vim+tmux+zsh簡直是絕配,甚至可以直接在伺服器上方便地擼代碼,跟本地開發體驗沒區別。
- item2(mac)。替代原生的終端。
- brew(mac)。類似ubuntu下的apt-get,可以方便安轉各種軟體和工具。
- Alfred(mac): mac 下一款功能強大的工具,不過我一般只用它快速打開軟體。
- Dash(mac): 強悍的文檔查詢工具。
- Karabiner-Elements(mac): 改鍵工具 https://github.com/tekezo/Karabiner-Elements
- autojump。方便在命令行里來回跳轉目錄。
- gitx(mac):方便查看代碼提交歷史,便於了解整個代碼倉庫是怎樣一步步構建的。http://gitx.frim.nl/user_manual.html
- tig: text-mode interface for git. 喜歡命令行的可以嘗試下。 https://github.com/jonas/tig
- tldr: 更好的man手冊
- EditorConfig: http://editorconfig.org/ 用來統一編輯器配置
一定要有個趁手的開發工具(它甚至比你女朋友都重要),不管是IDE還是編輯器,你程序員生涯的小半輩子都在和它打交道(提升編輯效率的秘訣在於多用鍵盤快捷鍵,少用滑鼠,以及可以高度定製的編輯器)。甚至編程字體你都要謹慎選取,比如字體可以很好區分1, l, I, 0, O, S, 5等易混淆字元,給瀏覽代碼帶來便利。如果使用的是mac可以google下 "Mac OS X development environment setup",有驚喜呦。最後注意你用編輯器的話一定要用 pylint,pep8 檢測插件,否則不遵守規範可能會導致用 IDE 打開項目後一堆警告(別人會想問候你祖宗的)。
- 《使用vim+tmux+zsh+autojump高效工作》
代碼輔助和檢測工具
- pylint: 代碼靜態檢測工具,請務必集成在你的編輯器或者IDE里(推薦)。能幫你少犯很多錯誤,動態語言寫項目要十分謹慎,非常容易犯錯。或者在CI加上 hook 每次 push 代碼的時候檢測。
- pep8: python代碼風格檢測工具(推薦)。懶人可以試試 autopep8 工具,自動格式化。所有人的代碼都過一遍 pylint 和 autopep8(放寬行長度) 看起來就比較一致了。
- autopep8/yapf: python 代碼自動格式化工具,懶人必備。都可以集成到 vim 里,比如使用 Plugin Chiel92/vim-autoformat 工具一鍵格式化。不過注意有時會無法正確處理多重縮進,這個比較危險,代碼邏輯都變了,還是自己寫代碼的時候注意下格式。
- prospector: 集成了眾多python代碼檢測工具
- mccabe: 圈複雜度檢測工具。McCabe 是一種度量程序複雜度的方法,如果單個子程序複雜度過高,或許就需要拆分邏輯提高程序的易讀性。
- pyflakes
- bandit: 用於Python代碼的安全性分析,openstack 的項目 https://github.com/openstack/bandit
- rope,可以用來重構等,功能強大。筆者經常用rope自動幫我重新整理導入的包順序。
- python-mode: 一個vim插件,有很多 python 補全,語法檢測等支持。並且集成了很多 python 工具(pylint,pep8等),筆者正在用。
- jedi-vim: 一個 vim 插件,python 支持補全和重構。注意和 rope 的自動補全有衝突,不要同時啟用。
- Pyreverse: 代碼 UML 生成工具, 幫助我們理解繼承關係 (https://pythonhosted.org/theape/documentation/developer/explorations/explore_graphs/explore_pyreverse.html)
- Epydoc: Automatic API Documentation Generation for Python
- 2to3/python-modernize: python2 轉 python3 工具。目前 Instagram 已經全面遷移到 python3
我覺得對於動態語言使用好靜態代碼檢測工具還是很有必要的,最好集成在你的開發工具里(比如使用vim的python-mode插件可以很容易整合這幾個代碼檢測工具),輔助你寫出高質量代碼,否則大型動態語言項目維護起來就是災難。python會給你一種代碼很好寫的錯覺,不嚴格要求經常會寫出來難以維護的爛代碼,甚至導致代碼倉庫失控。通過 pep8、pylint、mccae 檢測過的代碼如果警告和錯誤都消除以後,從代碼風格來說基本是沒有大問題的,筆者一開始用的時候也是各種警告,修正過很多代碼警告以後,以後代碼就越來越規範和整潔了。https://github.com/PyCQA
項目工具
- pigar: 找出項目使用到的依賴庫
- buildout: 項目構建工具
- pyenv/virtualenv: 多版本管理
- cookiecutter: 一系列項目模板生成工具,懶人必備。https://github.com/audreyr/cookiecutter
Api 工具
- checklist: http://python.apichecklist.com/
DSL
- PLY
- PyParsing
- Parsley
測試工具
- py.test
- nosetest
- unittest
- tox
- mock: mocking makes unit testing easier
文檔工具
- google doc
- gitbook + markdown
- sphinx + readthedoc (代碼即文檔),python 項目很多在用這個生成文檔
- swagger: 適合寫 restful 文檔
- jupyter notebook,可以做筆記或者代碼演示或者ppt,支持rst,md等格式,搞數據科學的人用得比較多,配合 RISE (https://github.com/damianavila/RISE) 可以做代碼互動式 slideshow,非常好的工具
- Confluence: 適合作為團隊的項目文檔工具,團隊大了以後文檔還是很重要的。
日誌、異常收集工具
- Sentry
- Fluentd
管理及運維工具(devops很火)
- Supervisor.進程管理
- Fabric.應用部署
- docker.最近比較火的容器技術
- SaltStack和Ansible. 配置管理
- StatsDGraphite等web監控
調試工具
- ipdb/pdb
- curl
- http
- postman
抓包工具
- mitmproxy: 用 python 實現的終端命令行抓包工具
- charles: 抓包軟體(收費)
壓測工具
- locust: python實現的壓測工具。http://locust.io/
- ab
資料庫工具
- mycli: mysql 命令行補全等。https://github.com/dbcli/mycli
- MysqlWorkbench/Sequel Pro: mysql 客戶端工具。
繪圖工具
processon: http://processon.com/ 使用了下感覺還不錯,基本能滿足需求
效率工具
- 番茄工作法:人長期專註的時間是有限的,找到適合自己的最佳番茄鍾,並且每個時間段都專註於一件事,每件事分清輕重緩急,要事優先。在休息時間處理喝水、上廁所等雜事,做幾個深呼吸給腦瓜子充點氧。《精力管理》
- teambiation/trello: todo list 工具。今天做了什麼;計劃做什麼;哪些困難導致工作被阻塞(實在搞不定的記下來及時向同事求助);發現了什麼問題;今天學到了什麼。(類似於開發日誌之類的玩意,每天都是真正做了事情的,並且最好每天都是學到了新東西的)
- 音樂:選擇類似於《阿爾法波高效記憶音樂》《巴洛克學習音樂》等,能幫助你隔絕噪音。反正筆者聽歌的時候會想歌詞反而會打擾思路,一般就是聽這種不怎麼讓你瞎想的音樂。
- 復盤。無論是寫代碼、做需求、改bug等,事後反思總結。分析並且記錄耗時的地方和可以改進的地方(怎麼讓自己漲點記性),對於一些錯誤或者坑也可以記錄成文檔當做團隊的知識財富。
推薦閱讀: