Python3中.whl文件創(chuàng)建及使用
1. wheel介紹:
.whl文件(WHL file)也稱(chēng)為輪子(wheel),這是用于python分發(fā)(distribution)的標(biāo)準(zhǔn)內(nèi)置包格式(standard built-package format)。它包含安裝所需的所有文件和元數(shù)據(jù)(metadata)。.whl文件使用zip進(jìn)行壓縮。.whl文件還包含有關(guān)此wheel文件支持的Python版本和平臺(tái)的信息。.whl文件格式是一種即裝即用格式(ready-to-install format),允許在不構(gòu)建源代碼分發(fā)(without building the source distribution)的情況下運(yùn)行安裝包。
.whl文件本質(zhì)上是zip文件,這些.whl文件可以使用解壓縮選項(xiàng)(unzip option)或標(biāo)準(zhǔn)解壓縮軟件應(yīng)用程序(如WinZIP和WinRAR)解壓縮。
.whl文件按照以下約定命名:
{dist}-{version}(-{build})?-{python.version}-{abi}-{platform}.whl
如果我們之前使用pip安裝過(guò)Python包,那么我們的系統(tǒng)上很可能已經(jīng)有輪子(wheel)被安裝過(guò)。pip是安裝wheel的包管理器。
我們可以通過(guò)pip安裝已下載的.whl文件:pip install <filename>.whl ,安裝包后,我們可以執(zhí)行Python shell并嘗試導(dǎo)入包:import whl_dist_name
wheel的直接好處是我們與其他人共享我們的包,他們不必?fù)?dān)心構(gòu)建它。他們只需pip install后即可使用該軟件包。它也是一個(gè)更小的共享文件(與所有源代碼相比),安裝速度更快,因?yàn)樗恍枰\(yùn)行安裝腳本。
2. wheel的類(lèi)型:
(1).universal wheel:包含py2.py3-none-any.whl。它在任何操作系統(tǒng)和平臺(tái)上都支持Python 2和Python 3。
(2).pure-python wheel:包含py3-none-any.whl或py2-none-any.whl。它支持Python 3或Python 2,但不能同時(shí)支持兩者。它在其它方面與universal wheel相同,但它會(huì)被標(biāo)記為py2或py3而不是py2.py3標(biāo)簽。
(3).platform wheel:支持特定的Python版本和平臺(tái)。
3. 創(chuàng)建wheel:
(1).將所有模塊(python腳本)、包(包含模塊的文件夾/目錄)保存在父目錄中。隨意命名根目錄,通常與項(xiàng)目相關(guān)。
(2).最好創(chuàng)建一個(gè)空的名為_(kāi)_init__.py文件,并將此__init__.py文件放在所有包目錄和子包目錄下。無(wú)需將其保存在根目錄中。
(3).創(chuàng)建一個(gè)名為setup.py的文件并將其放在根目錄中。此腳本的內(nèi)容至少應(yīng)包括:distribution name, version number, and list of package names
(4).轉(zhuǎn)到你可以運(yùn)行python和pip命令的命令提示符。在命令提示符下更改目錄并導(dǎo)航到放置setup.py的項(xiàng)目的根目錄,執(zhí)行以下命令:擴(kuò)展名為.whl的文件將在根目錄下自動(dòng)創(chuàng)建的子目錄中創(chuàng)建,名為dist。
wheel中并不包含setup.py,wheel不必運(yùn)行setup.py腳本。
注:需提取安裝wheel setuptools: pip install wheel setuptools,在conda中默認(rèn)是安裝的
python setup.py bdist_wheel --universal # universal wheel python setup.py bdist_wheel # pure-Python wheel
這里通過(guò)conda在虛擬環(huán)境base下創(chuàng)建一個(gè)wheel,取名為testwheel目錄組織結(jié)構(gòu)如下所示:
setup.py內(nèi)容如下:
import setuptools setuptools.setup( name="testwheel", version="1.0.0", author="fengbingchun", author_email="fengbingchun@163.com", description="test wheel", packages=setuptools.find_packages(), url="https://github.com/fengbingchun", license="MIT", python_requires=">=3.8" )
testwheel目錄下的__init__.py是個(gè)空文件,math目錄下的__init__.py內(nèi)容如下:
from .math_add import * from .math_sub import *
math_add.py內(nèi)容如下:
def add3(a, b, c): print("call add operation: three parameters ...") return (a+b+c) def add2(a, b): print("call add operation: two parameters ...") return (a+b)
math_sub.py內(nèi)容如下:
def sub3(a, b, c): print("call sub operation: three parameters ...") return (a-b-c) def sub2(a, b): print("call sub operation: two parameters ...") return (a-b)
執(zhí)行如下命令生成wheel,此wheel僅限于在Python3上執(zhí)行,將終端定位到setup.py目錄下
執(zhí)行完上述命令后會(huì)產(chǎn)生3個(gè)新的目錄,build, dist, testwhell.egg-info,各個(gè)目錄的內(nèi)容如下所示,生成的whell在dist目錄下,全名為testwheel-1.0.0-py3-none-any.whl,只需將此文件分發(fā)出去,其他人安裝后即能使用。
4. 導(dǎo)入使用wheel:
如果你想在項(xiàng)目中安裝已經(jīng)安裝過(guò)的wheel文件,需要更新此wheel的版本號(hào)。如果版本號(hào)保持不變,pip將不會(huì)安裝它?;蛘呦刃遁d已安裝的whell: pip uninstall testwheel
通過(guò)conda新建一個(gè)虛擬環(huán)境testwheel,用來(lái)測(cè)試上面生成的testwheel-1.0.0-py3-none-any.whl,將終端定位到其它的test目錄下,并將生成的wheel文件拷貝到此目錄下,安裝,執(zhí)行結(jié)果如下圖所示:
會(huì)將此wheel安裝到anaconda3/envs/testwheel/lib/python3.8/site-packages/目錄下,如下圖所示:
在tmp下添加一個(gè)test.py文件,用于測(cè)試wheel,內(nèi)容如下:
from testwheel.math import math_add, math_sub a, b, c = 10, 5, 2 print("add3:", math_add.add3(a, b, c)) print("add2:", math_add.add2(a, b)) print("sub3:", math_sub.sub3(a, b, c)) print("sub2:", math_sub.sub2(a, b)) print("test finish")
執(zhí)行結(jié)果如下所示:可見(jiàn)正確的調(diào)用了wheel中的接口
如果需要反復(fù)的調(diào)整wheel的內(nèi)容,需要反復(fù)的測(cè)試,又不想修改version number,一種方法是可先卸載已安裝的wheel,然后再次安裝新的wheel,如下圖所示:也可使用--force-reinstall
GitHub: https://github.com/fengbingchun/Python_Test
到此這篇關(guān)于Python3中.whl文件創(chuàng)建及使用的文章就介紹到這了,更多相關(guān)Python3中.whl文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用qt quick-ListView仿微信好友列表和聊天列表的示例代碼
本文以微信好友列表為例給大家學(xué)習(xí)listview的相關(guān)知識(shí),通過(guò)實(shí)例demo給大家詳解qt quick-ListView仿微信好友列表和聊天列表的實(shí)現(xiàn)方法,需要的朋友參考下吧2021-06-06python3中超級(jí)好用的日志模塊-loguru模塊使用詳解
loguru默認(rèn)的輸出格式是上面的內(nèi)容,有時(shí)間、級(jí)別、模塊名、行號(hào)以及日志信息,不需要手動(dòng)創(chuàng)建?logger,直接使用即可,另外其輸出還是彩色的,看起來(lái)會(huì)更加友好,這篇文章主要介紹了python3中超級(jí)好用的日志模塊-loguru模塊使用詳解,需要的朋友可以參考下2022-11-11python爬蟲(chóng)實(shí)戰(zhàn)之爬取京東商城實(shí)例教程
這篇文章主要介紹了python爬取京東商城的相關(guān)資料,文中通過(guò)爬取一個(gè)實(shí)例頁(yè)面進(jìn)行了講解,通過(guò)示例代碼和圖文介紹的非常詳細(xì),相信對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-04-04pydantic?resolve解決嵌套數(shù)據(jù)結(jié)構(gòu)生成痛點(diǎn)分析
這篇文章主要為大家介紹了pydantic?resolve解決嵌套數(shù)據(jù)結(jié)構(gòu)生成痛點(diǎn)分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04python GUI庫(kù)圖形界面開(kāi)發(fā)之PyQt5信號(hào)與槽的高級(jí)使用技巧裝飾器信號(hào)與槽詳細(xì)使用方法與實(shí)例
這篇文章主要介紹了python GUI庫(kù)圖形界面開(kāi)發(fā)之PyQt5信號(hào)與槽的高級(jí)使用技巧裝飾器信號(hào)與槽詳細(xì)使用方法與實(shí)例,需要的朋友可以參考下2020-03-03Python在不同目錄下導(dǎo)入模塊的實(shí)現(xiàn)方法
下面小編就為大家?guī)?lái)一篇Python在不同目錄下導(dǎo)入模塊的實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-10-10python+selenium實(shí)現(xiàn)自動(dòng)搶票功能實(shí)例代碼
Selenium是ThoughtWorks公司的一個(gè)強(qiáng)大的開(kāi)源Web功能測(cè)試工具系列,采用Javascript來(lái)管理整個(gè)測(cè)試過(guò)程,包括讀入測(cè)試套件、執(zhí)行測(cè)試和記錄測(cè)試結(jié)果。這篇文章主要介紹了python+selenium實(shí)現(xiàn)自動(dòng)搶票,需要的朋友可以參考下2018-11-11