這篇文章主要為大家展示了“如何將python包發(fā)布到PyPI和制作whl文件”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“如何將python包發(fā)布到PyPI和制作whl文件”這篇文章吧。
成都創(chuàng)新互聯(lián)公司是一家以成都網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)、品牌設(shè)計(jì)、軟件運(yùn)維、成都網(wǎng)站營(yíng)銷、小程序App開(kāi)發(fā)等移動(dòng)開(kāi)發(fā)為一體互聯(lián)網(wǎng)公司。已累計(jì)為PVC花箱等眾行業(yè)中小客戶提供優(yōu)質(zhì)的互聯(lián)網(wǎng)建站和軟件開(kāi)發(fā)服務(wù)。wheel文件
Wheel和Egg都是python的打包格式,目的是支持不需要編譯或制作的安裝過(guò)程,實(shí)際上也是一種壓縮文件,將.whl的后綴改為.zip即可可看到壓縮包里面的內(nèi)容。按照官網(wǎng)說(shuō)法,wheels是發(fā)行版Python的新標(biāo)準(zhǔn)并且要取代.egg。 Egg格式是由setuptools在2004年引入,而Wheel格式是由PEP427在2012年定義。 Wheel現(xiàn)在被認(rèn)為是Python的二進(jìn)制包的標(biāo)準(zhǔn)格式。
以下是Wheel和Egg的主要的不同點(diǎn):
Wheel有一個(gè)官方的PEP427來(lái)定義,而Egg沒(méi)有PEP定義。
Wheel是一種分發(fā)格式,即打包格式。而Egg既是一種分發(fā)格式,也是一種 運(yùn)行時(shí)安裝的格式,并且是可以被import的。
Wheel文件不會(huì)包含.pyc文件
Wheel使用和PEP376兼容的.dist-info目錄,而Egg使用.egg-info目錄。
Wheel有著更豐富的命名規(guī)則。
Wheel是有版本的,每個(gè)Wheel文件都包含wheel規(guī)格的版本和打包它的實(shí)現(xiàn)。
Wheel在內(nèi)部被sysconfig path type管理,因此轉(zhuǎn)向其他格式也更容易。
distutils和setuptools工具
用來(lái)Python環(huán)境中構(gòu)建和安裝額外的模塊,模塊可以基于Python,也可以C/C++寫(xiě)的擴(kuò)展模塊,可以是python包,包中包含了C和Python編寫(xiě)的模塊。setuptools是 Python Enterprise Application Kit(PEAK)的一個(gè)副項(xiàng)目,它是一組Python的 distutilsde工具的增強(qiáng)版(適用于 Python 2.3.5 以上的版本,64 位平臺(tái)則適用于 Python 2.4 以上的版本),可以讓程序員更方便的創(chuàng)建和發(fā)布 Python 包,特別是那些對(duì)其它包具有依賴性的狀況。
setuptools重點(diǎn)在于setup.py文件編寫(xiě):
setup.py參數(shù)介紹:
name : 打包起來(lái)的包的文件名
version : 版本號(hào),添加為打包文件的后綴名
author : 作者
author_email : 作者的郵箱
py_modules : 打包的.py文件
packages: 打包的python文件夾
include_package_data : 項(xiàng)目里會(huì)有一些非py文件,比如html和js等,這時(shí)候就要靠include_package_data 和 package_data 來(lái)指定了。package_data:一般寫(xiě)成{‘your_package_name': [“files”]}, include_package_data還沒(méi)完,還需要修改MANIFEST.in文件.MANIFEST.in文件的語(yǔ)法為: include xxx/xxx/xxx/.ini/(所有以.ini結(jié)尾的文件,也可以直接指定文件名)
license : 支持的開(kāi)源協(xié)議
description : 對(duì)項(xiàng)目簡(jiǎn)短的一個(gè)形容
ext_modules : 是一個(gè)包含Extension實(shí)例的列表,Extension的定義也有一些參數(shù)。
ext_package : 定義extension的相對(duì)路徑
requires : 定義依賴哪些模塊
provides : 定義可以為哪些模塊提供依賴
data_files :指定其他的一些文件(如配置文件),規(guī)定了哪些文件被安裝到哪些目錄中。如果目錄名是相對(duì)路徑,則是相對(duì)于
sys.prefix或sys.exec_prefix的路徑。如果沒(méi)有提供模板,會(huì)被添加到MANIFEST文件中。
將python文件(.py)封裝成可安裝使用的模塊
參考:https://docs.python.org/3.6/distutils/introduction.html#distutils-simple-example
printtest.py
def test(): print('print test')
將以上.py文件做成python模塊,需要在相同目錄下創(chuàng)建setup.py文件,setup.py中輸入配置信息:
from setuptools import setup setup(name='printtest', version='1.0', py_modules=['printtest'], )
打開(kāi)終端,定位到該文件夾下,輸入:
python setup.py sdist
此時(shí)在目錄中生成dist文件夾,文件夾中有testpg-1.0.tar.gz文件,用戶安裝的話只需要testpg-1.0.tar.gz文件即可。將此文件解壓得到testpg-1.0文件夾,會(huì)發(fā)現(xiàn)該文件夾有我們剛剛書(shū)寫(xiě)的3個(gè)py文件,還有一個(gè)PKG-INFO,打開(kāi)該文件,會(huì)顯示該模塊的具體信息:由于我們沒(méi)有設(shè)置,所以為UNKOWN
Metadata-Version: 1.0 Name: printtest Version: 1.0 Summary: UNKNOWN Home-page: UNKNOWN Author: UNKNOWN Author-email: UNKNOWN License: UNKNOWN Description: UNKNOWN Platform: UNKNOWN
終端定位到此文件夾下,輸入以下命令,模塊將會(huì)被安裝到解釋器對(duì)應(yīng)的Lib/site-packages目錄下:
python setup.py install
安裝后,會(huì)發(fā)現(xiàn)Lib/site-packages目錄下存在printtest.py文件和printtest-1.0-py3.6.egg-info 應(yīng)用:
import printtest printtest.test()
輸出:
print test
封裝Python包
導(dǎo)入單個(gè)Python文件時(shí)成為Python模塊,而包含多個(gè)Python文件的文件夾成為一個(gè)Python包。本節(jié)主要講述怎樣封裝一個(gè)Python包。
1.創(chuàng)建一個(gè)文件夾,將需要封裝的pagtest文件夾(里面為.py文件,需要包括一個(gè)__init__.py文件,內(nèi)容可以為空)放到該文件夾中,然后創(chuàng)建setup.py文件對(duì)包進(jìn)行配置:
from setuptools import setup setup(name='pagtest', version='1.0.0', description='A print test for PyPI', author='winycg', author_email='win@163.com', url='https://www.python.org/', license='MIT', keywords='ga nn', project_urls={ 'Documentation': 'https://packaging.python.org/tutorials/distributing-packages/', 'Funding': 'https://donate.pypi.org', 'Source': 'https://github.com/pypa/sampleproject/', 'Tracker': 'https://github.com/pypa/sampleproject/issues', }, packages=['pagtest'], install_requires=['numpy>=1.14', 'tensorflow>=1.7'], python_requires='>=3' )
2.創(chuàng)建README.txt文件用于對(duì)文件的安裝以及使用信息做描述
3.目前文件夾的目錄的架構(gòu)為:
pagtest/ __init__.py print1.py print2.py setup.py README.txt
輸入以下命令進(jìn)行打包,制作source distribution(源代碼發(fā)布包),此命令將會(huì)把所有內(nèi)容在dist/目錄打包為pagtest-1.0.0.tar.gz
python setup.py sdist
4.上傳到PyPI上。上傳時(shí),可以建立一個(gè)賬戶驗(yàn)證文件~/.pypirc(Windows不可以,因?yàn)槲募泻蟹欠ㄗ址?,也可以在上傳時(shí)輸入賬戶和密碼。
[distutils] index-servers=pypi [pypi] repository = https://upload.pypi.org/legacy/ username = <username> password = <password>
5.將命令行定位到此文件夾下,輸入命令對(duì)dist目錄下的pagtest-1.0.0.tar.gzt包進(jìn)行上傳,twine為Python包需要安裝:
twine upload dist/*
制作python包為wheel文件
wheel是一個(gè)已經(jīng)編譯好的包,在安裝時(shí)不需要編譯過(guò)程,安裝whl文件時(shí)要比發(fā)布的源文件安裝要快。
在如上第2步后,輸入如下命令即可在生成.whl
python setup.py bdist_wheel
.whl文件在dist目錄下,上傳到PyPI:
twine upload dist/*
更新Python包
修改setup.py中的版本號(hào),然后直接上傳即可
以上是“如何將python包發(fā)布到PyPI和制作whl文件”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司行業(yè)資訊頻道!
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
網(wǎng)頁(yè)名稱:如何將python包發(fā)布到PyPI和制作whl文件-創(chuàng)新互聯(lián)
轉(zhuǎn)載來(lái)源:http://jinyejixie.com/article32/egdpc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、網(wǎng)站制作、網(wǎng)站改版、標(biāo)簽優(yōu)化、外貿(mào)網(wǎng)站建設(shè)、小程序開(kāi)發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容