本文主要想要筆記如何建立一個屬於自己的 pip package,然後直接 host 在 Github page 上面,如果有新的版本重新下載就可以直接使用。
本文內容相對其他專業文章來說比較簡單(因為我比較懶惰Q_Q),所以希望拋磚引玉,可以讓大家有些簡單的想法,然後有興趣可以找比較深入的文章來參考。
這對於有一些比較沒自信的玩家(例如小弟我XD),如果心臟不夠大顆不想把你的作品 lib 推上 PyPi,也可以學 Golang 一樣輕鬆使用自己的 public Github repo 作為 host 管理你的函式庫。
使用的範例程式碼在此,可以直接試玩看看
pip install git+https://github.com/cftang0827/pip_package_example@master
而專案內容物如下:
.
├── LICENSE
├── README.md
├── pip_package_example
│ ├── __init__.py
│ ├── api.py
│ └── data
│ ├── __init__.py
│ └── model.json
└── setup.py
其中比較值得注意的部分是 setup.py
本文會針對裡面的一些設定進行簡單的講解,如果需要比較詳盡的也可以參考官方文件
基本上所有相關的設定都會寫在 setup.py
裡面,而在本範例中 pip_package_example
資料夾裡面就是存放你的 package 需要用到的程式碼或是靜態檔案(例如機器學習的 model file 或是一些 config file),因為在 pip package 的邏輯中,不是 .py
結尾的檔案都不被認為是必須的 package file ,所以必須在 setup.py
裡面另外設定。
以上面的作為範例來解釋每一項的用意,詳細的可以看這裏
- name: 就是 package 的名稱
- version: package 的版本號碼
- description: package 的描述文字
- author: 作者
- author_email: 作者 email
- url: package 的官方網站位置,可以使用 Github repo url
- install_requires: requirement package 的 list,本文只有
numpy
,可以使用>=
,<=
,==
來表達你想要的版本 - packages: 通常是一個 List, 通常會放 package 的名稱
- package_data: 一般來說,setuptools 只會針對
.py
結尾的檔案把他打包,如果今天你想要其他檔案類型(例如 json )那就要把他放在package_data 裡面,其中pip_package_example
代表package name 後面的data/*json
代表的就是我們要打包所有在 pip_package_example 裡面有符合data/*json
的檔案 - package_dir: 一個 dict 可以 map package 和 資料夾名稱
- license: string, 代表你在這個 package 用了什麼 License
- zip_safe: Ture/False, 代表是否可以安全的使用 zip file 安裝這個 package,如果為 False, 代表
bdist_egg
安裝的 command 在 build egg file 的時候會每一次檢查你是否有任何潛在風險,如果設定為 True 可以加快 import 的速度,詳情請閱 - keywords: For descriptive meta-data,詳情請閱,此關鍵字對於在 PyPI 搜尋該 package 會有幫助
- classifiers: 包含了這個 package 的類型,支援的平台以及成熟度的資訊,也是一段通常作用在 PyPI 的 meta-data
這次就簡單介紹到這,有問題或是錯誤歡迎留言指證!
參考資料