Python 在 Large-scale 項目中的一些 應用和實踐
本文擬從以下幾個方面來探討 Python2 在 Large-scale3 項目中的一些 應用和實踐,內容都是滿滿的原創經驗:
- Python 的項目構建
- Python 的代碼編寫
- Python 的運行時 </ul>
Python 的項目構建
新項目的構建要解決的問題如下:
標準化目錄結構
一個標準的目錄結構有助于項目組成員互相理解,減少溝通成本。由于繼承性的需要,實際采用的是 maven 模式。于是一個完整的目錄結構是這個樣子的:
project-root ├── pom.xml └── src ├── main │ ├── config │ ├── python (注1) │ ├── rpm-resources (注2) │ └── scripts (注3) └── test ├── config ├── features (注4) └── python (注5)
注:
- 存放 Python 的 Package
- 存放需打包的同等目錄結構
- 存放 Scriptlet
- 存放 Lettuce Feature 文件
- 存放 Python 的 UT 和 FT </ol>
- Syntax errors and inconsistencies (using Pyflakes or Pylint)
- PEP8 violations
- PEP257 violations </ul>
- 生成遵循標準化目錄結構的項目模板
- 提供語言風格的檢查開關
- 管理 Python 運行環境
- 語法高亮
- 智能提示
- 自動完成 </ul>
-
Django 大約是 Python 世界中的 Spring Framework。 ?
</li> - </li>
-
又名企業級。特點是開發人員多,業務量大,接口多樣,架構不定復雜。 ?
</li> -
能直接安裝至目標系統的服務配置包。 ?
</li> -
事實上 Python 的 Project 構建并沒有強依賴關系,不像 Java 缺少必要的 jar 則無法成功編譯。但是,在構建的時候使用 Pylint 工具進行偽編譯,是控制 Large-scale 項目代碼質量的最佳實踐。 ?
</li> - </li> </ol> </div> 轉自:http://aclisp.github.io/jekyll/update/2014/12/29/large-scale-python-1.html#fn:LS
它與 GitHub 上標準的 Python 項目(如 Django)不同。后者是純粹的 Python 包,用于發布 PyPI。而企業閉門開發,需要利用內部的 maven 倉庫;同時這里4更需要一種混合包,以 Python 實現為主體,有限度集成 Shell 腳本。
模塊重用
經過一段時間的演化,project-1 和 project-2 的公用部分被獨立出來成為新的 common-libs
git-repo-root ├── common-libs ├── project-1 └── project-2
或者項目代碼跨越了 git 庫
git-repo-1 └── common-libsgit-repo-2 ├── project-1 └── project-2</pre>
在不同的構建環境(例如 UserHome 或者 Jenkins-CI Slave)中如何讓 project-1 和 project-2 順利發現 common-libs 并依賴5之完成構建?這個問題在 Java 世界里很好解決:假如 common-libs 的產出是 jar 包,
cd common-libs mvn install (or mvn deploy) cd ../project-1 mvn deploy cd ../project-2 mvn deploy在不搭建內部 PyPI 的前提下,這個問題一直沒有找到一個完美的解決方案。實際操作中,是讓cd common-libs; mvn install調用至python setup.py install --user,在本地安裝 common-libs。
語言風格
程序員都是個性動物,寫出的代碼各種風格都有。在大型項目中,統一的代碼風格非常有必要。Python 哲學里也有 preferably only one way to do it 6。流行的 Lint 工具有這么幾種:
這里邊,輕量級的是PEP8和Pyflakes。建議任何時候都開。當你靈感滿溢思如泉涌啪啪啪敲鍵盤時,它們在后臺默默的保持最基本檢查,絕不干擾思路,充分體現自由。重量級的Pylint和PEP257可以作為持續集成任務定時對整個代碼庫檢查。當然,如果你是追求完美的處女座,全部打開也沒有問題的,媽媽再也不用擔心我的代碼寫的亂七八糟了。
實踐中,我們把Pylint集成到maven compile,使提交入 git 的代碼都是 lint 過的。
IDE
工欲善其事,必先利其器。好的 IDE 能幫助做這些事情:
土豪就上公認神器 PyCharm 專業版。否則,Eclipse 裝上 PyDev 也能湊合。極客就用 Sublime + Anaconda,我是用的很高興的。
本篇到此結束。請看下篇 Python 的代碼編寫。