紀錄一些關於python module 和 package 的學習筆記,希望以後能常用上。
python module
模組化 (modularization): 將常會使用的函式(或物件)單獨寫成一份 script 後,再利用 (from) import 方式呼叫,可方便管理函式,不用從單一script追溯以增加效率
python package
套件 (package) 指的是 包含相關的程式檔案的資料夾結構,類似普渡的樂式大禮包只要引用套件就可任意使用內部模組,一般套件名稱等於資料夾名稱
將模組打包成套件的步驟:
- 建立一個資料夾,並命名為套件名稱
- 建立
__init__.py,python要求資料夾必須包含此檔案,才可以被識別為套件 - 將相關模組script放進來
- 在新的script以
import或是from ... imoprt來引入套件與模組使用,詳細差異可看下面實例會更清楚 **還有一種引入為from .. import*但容易在模組名稱相同時發生衝突,就不給例子了
實例
今天簡單寫一個名為 helpwork 的套件,內含 tellname.py 和 telltime.py 兩份script分別定義函式:
|
|
|
|
資料夾結構為:
開啟新 python script 測試能否引入:
- 使用
from ${package_name} import ${module_name},引用函式要${module_name}.${func_name}()
|
|
成功執行函式,並印出
|
|
- 使用
import ${package_name},以${package_name}.${module_name}.${func_name}()引用函式 注意: 若只給到${package_name}.${module_name}會報錯TypeError: 'module' object is not callable
|
|
成功執行函式,並印出
|
|
這時會看到原本 helpwork資料夾下多了 pycache 資料夾
套件研究: openpyxl
之前介紹過操作 xlsx 檔的實用套件 openpyxl,當時寫的引入方式為
|
|
這裡的 workbook, workshet 都屬於模組,在官方github 可看到套件的資料夾結構:

補充說明,若想區隔模組或避免同名函式混用出錯,可以將模組單獨建一個資料夾並放置函式script以及一份__init__.py;如上圖可見 workbook 模組資料夾下、有一份__init__.py 和放函示跟物件的 workbook.py
因此想建立 workbook/workbook.py 裡面定義的 Workbook 物件,以下兩種方式都能做到:
|
|
|
|
測試workbook.py 內定義的其中一個函式 sheetnames
|
|
成功印出新建的sheet跟預設sheet
|
|
(進階) 打包套件與推送
若想在不同平台使用同個套件,可以打包推送再安裝回本地使用 建議可先將 package code 推送至 Github,須包含以下基本內容:
|
|
其中 setup.py 紀錄套件相關的資訊,一般會引用兩種套件協助打包: distutils 或 setuptools (後者較常用)
以 setup() 提供套件相關資訊
|
|
打包完成,可以選擇:
- 安裝在環境
python3 setup.py install - 打包
python3 setup.py sdist / bdist_{egg;wheel}一個式 source code 一個式打包 metadata (出來的格式類似.zip) - 推送到TestPyPI 或 PyPI (需要申請帳號)
python3 setup.py sdist upload -r pypi
關於打包的更多介紹可以看這個網站: https://fuchencong.com/2021/12/07/python-package/ 由於沒有實際完成這步,未來有做會再來更新~
References
https://hackmd.io/@celineyeh/SyJSK8AXB https://medium.com/pyladies-taiwan/python-%E7%9A%84-import-%E9%99%B7%E9%98%B1-3538e74f57e3 https://www.learncodewithmike.com/2020/01/python-module-and-package.html https://medium.com/seaniap/python-%E6%A8%A1%E7%B5%84%E8%88%87%E5%A5%97%E4%BB%B6-8aa890eda31a https://setuptools.pypa.io/en/latest/setuptools.html https://fuchencong.com/2021/12/07/python-package/