Python 在 Large-scale 項目中的一些 應用和實踐

wcwx 9年前發布 | 27K 次閱讀 Python2 Python開發

本文擬從以下幾個方面來探討 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)

    注:

    1. 存放 Python 的 Package
    2. 存放需打包的同等目錄結構
    3. 存放 Scriptlet
    4. 存放 Lettuce Feature 文件
    5. 存放 Python 的 UT 和 FT
    6. </ol>

      它與 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-libs

      git-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 工具有這么幾種:

      • Syntax errors and inconsistencies (using Pyflakes or Pylint)
      • PEP8 violations
      • PEP257 violations
      • </ul>

        這里邊,輕量級的是PEP8和Pyflakes。建議任何時候都開。當你靈感滿溢思如泉涌啪啪啪敲鍵盤時,它們在后臺默默的保持最基本檢查,絕不干擾思路,充分體現自由。重量級的Pylint和PEP257可以作為持續集成任務定時對整個代碼庫檢查。當然,如果你是追求完美的處女座,全部打開也沒有問題的,媽媽再也不用擔心我的代碼寫的亂七八糟了。

        實踐中,我們把Pylint集成到maven compile,使提交入 git 的代碼都是 lint 過的。

        IDE

        工欲善其事,必先利其器。好的 IDE 能幫助做這些事情:

        • 生成遵循標準化目錄結構的項目模板
        • 提供語言風格的檢查開關
        • 管理 Python 運行環境
        • 語法高亮
        • 智能提示
        • 自動完成
        • </ul>

          土豪就上公認神器 PyCharm 專業版。否則,Eclipse 裝上 PyDev 也能湊合。極客就用 Sublime + Anaconda,我是用的很高興的。

          本篇到此結束。請看下篇 Python 的代碼編寫


          1. Django 大約是 Python 世界中的 Spring Framework。 ?

            </li>

          2. 以下出現的 Python 字樣特指 CPython?

            </li>

          3. 又名企業級。特點是開發人員多,業務量大,接口多樣,架構不定復雜。 ?

            </li>

          4. 能直接安裝至目標系統的服務配置包。 ?

            </li>

          5. 事實上 Python 的 Project 構建并沒有強依賴關系,不像 Java 缺少必要的 jar 則無法成功編譯。但是,在構建的時候使用 Pylint 工具進行偽編譯,是控制 Large-scale 項目代碼質量的最佳實踐。 ?

            </li>

          6. The Zen of Python ?

            </li> </ol> </div> 轉自:http://aclisp.github.io/jekyll/update/2014/12/29/large-scale-python-1.html#fn:LS

           本文由用戶 wcwx 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
           轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
           本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!