Coding筆記(5): Package for Install

JianJie
Aug 11, 2021

--

上一篇為基礎的Package,這只是使用文件所組成的純Python Package,可以將Package複製至Python的安裝位置中,即可直接Import該Package並使用。但Package中還可能會更加複雜或是使用其他語言之Library,亦或是讓軟體包管理系統(pip)管理Package,因此打包為可安裝的形式是個必須的步驟。

Package架構

以下架構為Python之範例,其中Package_test為當前的專案資料夾,並按照官網建立pyproject.toml、setup.py、README.md、LICENSE,之後產生結構如下圖:

tests/

單純是空資料夾,為暫存的測試資料夾

pyproject.toml

pyproject.toml為告訴軟體包管理(pip)打包之必須Package(環境),在這裡我們使用setuptools,其內容如下:

build-system.requires列出打包所需要的Package。注意:這裡列出的Package只會在打包時可使用,但打包完後並不可使用,Package會自動卸載。build-system.build-backend是用於打包的Package。

Configuring metadata配置文件

主要可以分成兩種形式: 動態配置文件(dynamic)or靜態配置文件(static)

動態配置文件(dynamic) setup.py : 可用於需要根據目前想要打包的程式調整打包之環境。

靜態配置文件(static) setup.cfg : 可以保證每次打包環境皆是固定的,配置環境更簡易且易於閱讀。

setup.py

name: 打包Package的名稱,名稱可以由字母、數字、_、-等符號組成。但要注意上傳至pypi.org時,不可與現有的Package名稱相衝突。
version: Package的版本。
author、author_email: 用於區別Package的作者。
description: 為單一一句對Package之說明
long_description: 為Package詳細說明,本範例是讀取README.md之內容作為詳細說明。
long_description_content_type: 為詳細說明的格式,上傳至PyPI的文字顯示方式,目前使用markdown格式,’text/markdown’。
url: 為此專案原始頁面,可以是GitHub、GitLab等軟體原始碼代管服務平台。
project_urls: 可以加入PiPY中顯示的其他鏈接。
classifiers: Package的分類,如上圖為兼容Python3,MIT的權限並且與OS無關之Package。可以至https://pypi.org/classifiers/尋找更多的分類。
packages、package_dir: 為專案之進入點,假設有自訂專案進入點,就可於此設定,否則使用setuptools.find_packages()時則會讓setuptools自動尋找進入點。
python_requires: 為此Package所必需的Python版本

setup.cfg

.cfg基本上與.py檔為相同的內容,各項參數意義相同。其中metadata為打包的一些資訊,options則是對於setuptools本身的控制。

README.md

為Package的詳細說明,可以按照GitHub的格式撰寫(Markdown),其相關說明https://guides.github.com/features/mastering-markdown/,由於我們的配置文件setup中有使用到README.md,因此此檔案在打包時必須存在。

LICENSE

此文件為說明User在使用這個Package時的條例。可以至https://choosealicense.com/選擇合適的LICENSE。

Package執行打包

這裡按照Python範例,使用build Package,因此先利用pip安裝build Package

接著到pyproject.toml路徑下運行pyproject.toml。

此時會在dist建立兩個文件,

.tar.gz為原始檔,.whl為打包後的Package,接著就可以使用pip安裝,Package就會被安裝至Python的目錄下,或是可以將Package上傳至PyPI。

--

--

JianJie
JianJie

Written by JianJie

Image Processing / Computer Vision / Deep Learning

No responses yet