Python的打包工具(setup.py)實戰篇
作者:尹正傑
版權聲明:原創作品,謝絕轉載!否則將追究法律責任。
當你寫好一個Python項目時,想要開源或者給別的小伙伴使用,這個時候就可以考慮使用打包工具來做這個事情,Python內置的setup.py工具就自帶了這個功能,本片博客將帶你來打包一個自己寫的python項目。
學會python打包后,可以把自己寫好的模塊發布到公共的PyPI(https://pypi.org/)上,也可以搭建PyPI私服,供企業內部使用。
目前PyPI里面的模塊沒用太好的審核機制,不保證安全,因此要慎重使用。據說,數據分析領域基於python的開源模塊在不同的操作系統算出的結果竟然不同,這意味着所有基於該模塊的計算發表的論文結果都是不准確的!
一.查找setup幫助文檔
1>.找到setup的幫助文檔,如下圖所示
2>.如下圖所示,點擊"Distttributing Python Modules(Legacy version)"
3>.如下圖所示,點擊"Writing the Setup Script"
4>.閱讀官網文檔
5>.在自己的項目根目錄下創建setup.py文件,修改內容如下所示
# !/usr/bin/env python # -*- coding:utf-8 -*- # @author :yinzhengjie # blog:https://www.cnblogs.com/yinzhengjie from distutils.core import setup setup( # 指定項目名稱,我們在后期打包時,這就是打包的包名稱,當然打包時的名稱可能還會包含下面的版本號喲~ name='devops', # 指定版本號 version='0.1.1', # 這是對當前項目的一個描述 description='Python automatic operation and maintenance platform', # 作者是誰,指的是此項目開發的人,這里就寫你自己的名字即可 author='yinzhengjie', # 作者的郵箱 author_email='y1053419035@qq.com', # 寫上項目的地址,比如你開源的地址開源寫博客地址,也開源寫GitHub地址,自定義的官網地址等等。 url='https://www.cnblogs.com/yinzhengjie/p/14124623.html', # 指定包名,即你需要打包的包名稱,要實際在你本地存在喲,它會將指定包名下的所有"*.py"文件進行打包喲,但不會遞歸去拷貝所有的子包內容。 # 綜上所述,我們如果想要把一個包的所有"*.py"文件進行打包,應該在packages列表寫下所有包的層級關系喲~這樣就開源將指定包路徑的所有".py"文件進行打包! packages=['devops', "devops.dev", "devops.ops"], )
二.使用setup.py工具對自定義package進行打包操作
1>.查看setup.py工具的幫助信息
python setup.py --help-commands
2>.編譯python的包(本質上是新建了一個build目錄,而后將指定的packages列表包下的所有".py"文件拷貝過去)
python setup.py build
3>.將源文件進行打包操作
python setup.py sdist
4>.基於我們剛剛打包的文件進行安裝
pip install test/dist/devops-0.1.1.tar.gz
5>.卸載咱們剛剛安裝的包
pip uninstall devops
三.bdist命令
bdist命令是一個二進制分發包,或稱作安裝程序。該命令可以生成模板操作系統的安裝程序。
1>.制作windows下的安裝包
python setup.py bdist_wininst # 創建"*.exe"的文件 python setup.py bdist_msi # 創建"*.msi"的文件 python setup.py bdist --format=msi # 同樣是創建"*.msi"的文件
2>.制作rpm包
python setup.py bdist_rpm # 創建"*.rpm"的文件,該命令需要在Linux操作系統上執行! python setup.py bdist --format=rpm # 同上
3>.制作壓縮文件
python setup.py bdist --format=zip # 創建"*.zip"壓縮文件 python setup.py bdist --format=gztar # 創建"*.tar.gz"文件
四.將python打包成egg包或者whl包(本質上是一個zip文件)
1>.安裝wheel模塊
pip install wheel
2>.修改"setup.py"文件
# !/usr/bin/env python # -*- coding:utf-8 -*- # @author :yinzhengjie # blog:https://www.cnblogs.com/yinzhengjie # from distutils.core import setup from setuptools import setup # 注意哈,setuptools是基於distutils進行封裝的,但打wheel包時要從setuptools包導入setup模塊喲~ setup( # 指定項目名稱,我們在后期打包時,這就是打包的包名稱,當然打包時的名稱可能還會包含下面的版本號喲~ name='devops', # 指定版本號 version='0.1.1', # 這是對當前項目的一個描述 description='Python automatic operation and maintenance platform', # 作者是誰,指的是此項目開發的人,這里就寫你自己的名字即可 author='yinzhengjie', # 作者的郵箱 author_email='y1053419035@qq.com', # 寫上項目的地址,比如你開源的地址開源寫博客地址,也開源寫GitHub地址,自定義的官網地址等等。 url='https://www.cnblogs.com/yinzhengjie/p/14124623.html', # 指定包名,即你需要打包的包名稱,要實際在你本地存在喲,它會將指定包名下的所有"*.py"文件進行打包喲,但不會遞歸去拷貝所有的子包內容。 # 綜上所述,我們如果想要把一個包的所有"*.py"文件進行打包,應該在packages列表寫下所有包的層級關系喲~這樣就開源將指定包路徑的所有".py"文件進行打包! packages=['devops', "devops.dev", "devops.ops"], )
3>.打包whl和egg格式,如下圖所示
python setup.py bdist_egg # 打"*.egg"的包 python setup.py bdist_wheel # 打"*.whl"的包