天天看點

python打包工具下載下傳_Python打包工具

當我們完成一個完整的項目,需要該項目檔案中打包成分發包共享給他人或者上傳到pypi社群以供他人下載下傳。這就需要對該項目進行打包分發。

項目檔案

這是一個已寫好的項目檔案包,叫做my_pkg,它的目錄結構如下:

tutorial/my_pkg/

__init__.py

main.py

utils/

__init__.py

other.py

在my_pkg中有兩個檔案和一個子包utils,現在我們需要對這個my_pkg進行打包。

建立封包件和setup.py檔案

my_pkg是将打包的Python封包件,在my_pkg的同級目錄下分别建立以下檔案:

setup.py ---- 打包腳本檔案,執行該腳本将自動完成打包

LICENCE ---- 許可證檔案

README ---- 包的介紹和說明

建立後檔案目錄結構如下:

tutorial/my_pkg/

__init__.py

main.py

utils/

__init__.py

other.py

setup.py

LICENCE

README

setup.py配置

打開setup.py檔案,寫入以下内容,

import setuptools #導入setuptools, 基于setuptools子產品進行打包分發

#将readme檔案中内容加載進來,作為對包的詳細說明(可以不需要)

with open("README.md", "r") as fh:

long_description=fh.read()#調用setuptools的setup進行打包,通過參數配置指定包的資訊,這是打包的關鍵設定

setuptools.setup(

name="my_pkg", #這是該包的名字,将來可能使用pip install 該包名直接下載下傳

version="0.0.1", #版本号,

author="Example Author", #作者

author_email="[email protected]", #作者郵箱

description="A small example package", #包簡短的描述

long_description=long_description, #詳細的描述,這裡使用從readme中讀取的内容

long_description_content_type="text/markdown", #較長的描述來源檔案的檔案類型,這裡使用markdomn

url="https://github.com/pypa/my_pkg", #可以将項目上傳到github,gitlab等,在此指定連結位址以供下載下傳。

#指定需要打包的内容,輸入需要打包包名字元串清單,打包時不會自動擷取子包,需要手動指定,例如:["my_pkg", "mypkg.utils"]

packages=setuptools.find_packages(), #使用該函數可以自動打包該同級目錄下所有包

classifiers=[ #指定一些包的中繼資料資訊,例如使用的協定,作業系統要求

"Programming Language :: Python :: 3","License :: OSI Approved :: MIT License","Operating System :: OS Independent",

],

python_requires='>=3.6', #該包的Python版本要求

)

這些是對打包行為的一些配置,setup.py中除了上述内容,還可以添加包括以下屬性資訊

name package name

version (-V) package version

fullname-author the author's name

author-email the author's email address

maintainer the maintainer's name

maintainer-email the maintainer's email address

contact the maintainer's name if known, else the author's

contact-email the maintainer's email address if known

url the URL forthis package

license the license of the package

licencefor --license

description the package description

long-description the long package description

platforms the list of platforms

classifiers the list of classifiers

keywords the list of keywords

provides the list of packages/modules provided

requires the list of packages/modules required

obsoletes the list of packages/modules made obsolete

setup.py配置完成後,就可以執行這個檔案進行打包了(在指令行使用Python解釋器指定參數執行,不能直接執行),在此之前還有LICENCE和README兩個檔案需要完善(也可以不做處理,不影響打包執行)。

README

這個檔案是該包的詳細說明檔案,包括各種資訊,例如該包如何安裝,需要的環境,如何使用等詳細内容。

LICENCE

指定許可證資訊,開源軟體都遵循了不同的開源協定,這些協定規定了使用者使用該包後必須遵守的原則,可以檢視不同開源協定内容 https://choosealicense.com/ ,選則一個協定,複制對應的協定内容到該檔案中即可。

通過setup.py生成分發包

setup.py檔案配置完成後,就可以通過Python執行進行打包,使用cmd指令行工具打開終端,cd 到setup.py檔案所在目錄(windows 可以在檔案資料總管中的setup.py目錄上方路徑中直接cmd,直接在該目錄打開終端)

打包成wheel二進制包

這需要最新的setuptools 和 wheel包。執行以下指令更新

python -m pip install --user --upgrade setuptools wheel

執行該setup.py檔案并指定參數,指定打包為wheel二進制檔案

python setup.py sdist bdist_wheel

執行該指令後,該目錄下會多出三個目錄。在dist目錄下就是我們打包好的源代碼檔案(tar.gz)和wheel二進制檔案(.whl)

build

dist/my_pkg-0.0.1.tar.gz #被打包内容所有原代碼,按照原有的層級結構

my_pkg-0.0.1-py3-none-any-whl #可以通過pip install 直接安裝

my_pkg.egg-info

現在我們可以及将這個dist檔案夾中的内容共享給他人,也可以上傳pypi社群供他人下載下傳安裝,在得到這個dist包後,可以通過pip安裝指令直接安裝内部的.whl檔案

pip install my_pkg-0.0.1-py3-none-any-whl

該指令會将這個包安裝到python安裝目錄下/Lib/site-packages目錄下,使用pip list指令可以看到在清單中出現了名為my_pkg的包名,安裝成功。該包可以使用了。

如果将該包上傳到pypi社群供他人下載下傳,需要注意自己包名不要和其他貢獻者的包名相同,如何判斷是否重複,嘗試在未上傳前使用pip isntall 包名進行安裝,若沒有找到找到該package表示該名可用,也可以上pypi官網搜尋。上傳成功後,直接使用pip install 包名進行安裝。上傳pypi過程見官網示例https://packaging.python.org/tutorials/packaging-projects/#uploading-the-distribution-archives

打包為源碼包-sdist

通過wheel二進制檔案打包是目前較為流行的方式。除了wheel二進制檔案,我們還可以使用Python源代碼壓縮檔案形式進行打包。同樣在setup.py同級目錄下,進入cmd指令行,執行指令

python setup.py sdist

将會在建立dist和my_pkg.egg.info目錄。我們隻關心dist目錄,該目錄下有一個壓縮檔案,這個壓縮檔案包含了打包後的全部源碼。

dist/my_pkg-0.0.1.tar.gz

将該檔案發送給他人,可以直接使用pip install my_pkg-0.0.1.tar.gz直接安裝該包,同樣在使用pip list可以檢視到該包名。

另外,還可以解壓該源碼包,在setup.py目錄執行python setup.py install安裝該包。

二進制安裝程式-bdist

打包為二進制安裝包,生成目标作業系統的安裝程式。

生成windows 安裝程式

針對windows環境下,以下三條指令均可

python setup.py bdist_wininst

Python setup.py bdist_msi

python setup.py bdist--format=msi

建立一個dist目錄,生成一個安裝程式,在Windows上直接輕按兩下即可安裝該包。

生成rpm包

python setup.py bdist_rpm

python setup.py bdist-- format=rpm

在Linux系統中使用rpm指令進行安裝。

生成壓縮檔案

python setup.py bdist --format=zip

python setup.py bdist--format=gztar