iT邦幫忙

0

新手如何入門 "python 開源專案開發"

  • 分享至 

  • xImage

因工作性質,平常都是寫一些自動化流程的 python script

近期開始嘗試開發 side project,但感覺寫出來的東西品質很差。我有試著找一些 github 比較有名的 python 專案,大致掃了一遍專案檔案目錄規劃、code 的邏輯設計架構、coding style、testing、documentation ... 等等

頓時感到十分挫折,不論從哪個面向來看,都和開源專案差了"好幾個等級"。一時之間不知道要先從哪裡改善起 ... 我嘗試在 youtube、bilibili 上找 "python 大補帖",但絕大部分都還是著重在 "程式語言" 本身,而我感覺我所缺乏的是 "程式語言在工程面" 的實務操作知識

我有找到這篇 文章,感覺應該是我要的,我預計按照上面的建議,把裡面附上的連結挑一些出來閱讀。還請各位前輩幫我掃盲,確保我沒有"走彎路"

我主要是想多了解一些關於 "如何規劃、設計 python 開源專案相關" 的知識,提升 side project 之 readability, maintainability,之後才有臉拿出去開源

不知各位前輩是否有推薦的資源、tools 可以快速補足相關知識
(我總感覺 github 上的 code 寫成那樣,一定有使用不少輔助工具

不會去參加社團或者講座認識相關朋友或同事
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
2
貓虎皮
iT邦新手 3 級 ‧ 2023-04-15 21:11:25

程式碼的編排目的不外乎就是您所提到的易讀性可維護性兩種,所以在此就以這兩點來做說明。

易讀性

  1. 如果要將程式minify,最好把minify前的檔案也丟上去,可以使用檔名或額外的資料夾來區分原始檔minify檔
  2. 變數名稱不要以一個字母做縮寫,除了i這種計數變數除外
  3. 變數名稱設定時要統一格式(小駝峰、大駝峰、底線、連接線等),在某些程式語言中,則會有其既定的變數命名習慣
    • 比如說py的命名習慣如下:

      類型 習慣

      class|大駝峰
      function|底線(或小駝峰)
      constant|底線且全大寫
      variable|底線(或小駝峰)

      參考資料

  4. 加入適當空格
    • 前後加空格:等於系列(如:a += 1)
    • 後方加空格:分隔符系列(如:[a, b] = [1, 2])
  5. 統一單雙引號的使用,盡量不要一下單引號,一下雙引號
  6. 善用簡潔的語法
    • for list([... for ... in ... if ...])
    • lambda(lambda ...: ...)
    • 三元運算子(... if ... else ...)

可維護性

  1. 程式中如果有極常使用到的靜態變數,可以在檔案最前面做宣告,或額外獨立出來變成config檔
  2. 模組引用最好寫在檔案的最前面,先於前一條
  3. 將使用到的模組名稱(及版本)匯出至requirements.txt,以便他人進行模組的安裝與執行環境的架設
  4. 分段、分檔、分資料夾
    • 單檔專案 => 依據流程與程式片段之功能分成多個區段,並標上區段簡述
    • 多檔小專案 => 依據程式片段之功能將其分檔,並在檔案開頭註記該檔案之功能,且盡量不要在一檔案中塞入與同檔中其它功能相差甚遠的程式
    • 多檔大專案 => 依據程式片段之功能將其分檔、分資料夾,且圖片素材、測試文件等盡量獨立成不同檔案夾,而不要讓檔案散成一團
  5. 開頭加上#!/usr/bin/env python{version}來做所用版本的標註,先於第二條
  6. 善用functionclass來將功能統整
  7. 函式參數定義時加上類型限制判斷+轉換來將可操作的部分規範於一定範圍內
  8. 加入適當的報錯錯誤說明,使除錯更為方便
  9. 使用引用檢查(if __name__ == "__main__": ...)來針對直接執行引用狀態做執行步驟、內容的區別

工具

至於工具的部分主要還是利用編輯器的格式化功能,將程式排版整理乾淨,不過有時候格式化處理工具無法在正確位置換行(換行過於平凡),所以一開始寫的時候就做好程式排版也是很重要的。

希望有幫助到您=^w^=

老漢 iT邦新手 5 級 ‧ 2023-04-15 22:58:27 檢舉

感謝分享,一般的 linter, formatter 我還是會用的
主要是專案整體架構的部分,我看 github 專案很多都會放各式非 ".py" 的檔案 (應該是工程需求)。這部份比較不明白,看起來不太像是手動建立的

貓虎皮 iT邦新手 3 級 ‧ 2023-04-16 08:08:59 檢舉
  • requirements.txt

    紀錄所使用之函式庫的名稱與版本,

    # 生成當前環境已安裝之函式庫至requirements.txt
    pip freeze > requirements.txt
    
    # 快速安裝requirements.txt之內容
    pip install -r requirements.txt
    
  • *.ipynb

    i python notebook,為jupyter notebook、colab等編輯器支援的檔案格式,便於儲存py程式碼、md說明以及程式輸出。

  • *.md

    markdown,該專案的說明文件,或開發者備註。

  • *.yml

    yaml,層狀資料格式,通常供套件管理器或相關管理工具做取用。如:travis的.travis.yml、docker的docker-compose.yml

  • .gitignore

    專案推上github時不要上傳的檔案及資料夾。

  • .gitattributes

    定義各檔案之屬性,方便git管理,常見屬性有:texteoldiff,可考這篇文章

  • LICENSE

    創建github專案時可設定「執照(授權)」,專案創建時將自動建立該檔案。

  • VERSION

    版本註記文件,供管理工具辨識。

  • .github/workflows

    專案的github工作流(自動化作業)之設定,說明文件見此

  • Dockerfile、Dockerfile.cpu、Dockerfile.gpu

    給docker看的執行語法與前置作業。

  • setup.cfg

    設定執行時,各傳入參數的預設值,說明文件見此

  • .html、.htm

    網頁檔案,專案說明或功能操作介面。

2
EN
iT邦好手 1 級 ‧ 2023-04-16 01:05:50

一些比較成熟的開源專案都會有 Contribution guide [1] 可以參考 ,如果沒有的話也還是有一些方式:

  1. 看看台灣社群有沒有已知的貢獻者:如果有而且他也願意帶你入門,那麼這樣做是最快的。
  2. 靠一些網路上已有的貢獻心得掌握專案架構或是貢獻流程
  3. 從專案的 opend issue 下手,這樣有助於你了解該專案目前還有哪些可改進項目,如果有看到一些 contributor 認可且納入考量的 feature 請求,你就可以加緊腳步嘗試貢獻
  4. 如果上述幾點都不可行,也可以先從文件翻譯等工作開始
0
Terry L.
iT邦研究生 3 級 ‧ 2023-04-16 16:15:31

先加入 pylint 讓自己的 code 有一定的排版規範以及把自己的程式寫 unit tests。這兩者是開源專案最基本的。為了達到可測試性,自然而然會把自己的程式拆成小單位以符合 SRP。先完成以上就慢慢有頭緒了。

我要發表回答

立即登入回答