一文詳解python如何將編寫的模塊打包上傳至pypi
本文所依賴的環(huán)境為:
這里你可能會(huì)好奇,為啥和之前版本不一樣了呢?因?yàn)槲以趯W(xué)習(xí)打包的時(shí)候,發(fā)現(xiàn)我們此前的python 3.68只支持到Setuptools 59.6.0,沒(méi)辦法安裝到Setuptools 61.0,所以我重新源碼安裝了一下python 3.7。 如果你和我一樣,是在centos 7上面學(xué)習(xí)的,注意也要升級(jí)一下python版本哦!
這里還有一點(diǎn)需要注意,如果我們是第一次將python
進(jìn)行打包上傳到pypi
或者說(shuō)只是為了測(cè)試,建議一開(kāi)始不直接上傳pypi.org,而是上傳至test.pypi.org,這是python
提供的一個(gè)測(cè)試系統(tǒng),環(huán)境和pypi.org一致,所以,我們本篇文章所上傳的庫(kù)為test.pypi.org。
什么是pypi
python
除了系統(tǒng)默認(rèn)模塊,如os
、re
、time
等等,還有眾多的第三方模塊,如大名鼎鼎的flask
、wsgiref
等等。
我們通常想要使用第三方模塊的時(shí)候,需要先使用pip
進(jìn)行安裝,例如:
pip3 install flask
這個(gè)命令,會(huì)向軟件存儲(chǔ)庫(kù)下載第三方模塊包,這個(gè)軟件存儲(chǔ)庫(kù)就是Pypi
也稱之為包索引。默認(rèn)如果不指定源,則會(huì)向 pypi.org/ ,也可以在pip
中使用-i
選項(xiàng)指定源,例如清華pypi源等等。
用一句話概括,pypi
就是存儲(chǔ)python
開(kāi)發(fā)者編寫的第三方模塊的地方。
此外還有眾多的源,如果不是作為私有庫(kù)的話,幾乎都是同步的python
官方pypi
。
注冊(cè)pypi
如果你想注冊(cè)真實(shí)的
pypi
,則使用的url
為: pypi.org/account/register/。
這里還是要提醒,請(qǐng)不要將測(cè)試的項(xiàng)目上傳至pypi
,那樣對(duì)使用者很不友好。
打開(kāi)pypi
注冊(cè)頁(yè)面,填上電子郵件等信息,進(jìn)行注冊(cè),pypi
注冊(cè)網(wǎng)址: test.pypi.org/account/register/
填寫完畢后,點(diǎn)擊【Create account】即可創(chuàng)建賬號(hào)。而后pypi
會(huì)給注冊(cè)的郵箱發(fā)送一個(gè)校驗(yàn)url
,點(diǎn)擊后,即可注冊(cè)成功。
注冊(cè)成功后,我們需要生成token
用于上傳pypi
,注冊(cè)成功登錄后,需要從用戶名點(diǎn)擊,選擇【Account Settings】
往下滑,找到【API tokens】
點(diǎn)擊后,輸入Token
名稱,和選擇Token
范圍
完成后,點(diǎn)擊【Add token】 就可以了。
完成后,會(huì)得到一個(gè)很長(zhǎng)的以pypi-
開(kāi)頭的token
,請(qǐng)記住它,后面要用。
至此,注冊(cè)pypi
,生成token
已經(jīng)結(jié)束了。
python打包格式
這里我將整個(gè)目錄都放到了gitee
上,相關(guān)格式的話,可以看一下,地址: gitee.com/pdudo/golearn/tree/master/python/PackagingTesting/JuejinPdudoProject
在進(jìn)行打包之前,我們需要?jiǎng)?chuàng)建符合pypi
包格式的文件,其包的格式為:
其中,目錄和文件的含義分別為:
- LICENSE: 包的許可證。
- pyproject.toml:
python
項(xiàng)目配置文件。 - README.md:項(xiàng)目說(shuō)明文件。
- src: 存放源碼的目錄。
- src.juejinPdudoSampleWeb:是一個(gè)目錄,包名為:
juejinPdudoSampleWeb
。 - src.juejinPdudoSampleWeb.*:
python
源文件,注意__init__.py
為入口文件,可以為空。 - tests:測(cè)試程序目錄。
在該目錄下,pyproject.toml
尤其重要,這里貼一下我們本次打包文件的內(nèi)容為:
[build-system] requires = ["setuptools>=61.0"] build-backend = "setuptools.build_meta" [project] name = "JuejinPdudoProject" version = "0.0.2" authors = [ { name="pdudo", email="1052558+pdudo@user.noreply.gitee.com" }, ] description = "A simple WSGI-compliant web application layer framework" readme = "README.md" requires-python = ">=3.7" classifiers = [ "Programming Language :: Python :: 3", "License :: OSI Approved :: MIT License", ] [project.urls] "Homepage" = "https://gitee.com/pdudo/golearn/blob/master/python/PackagingTesting" "Bug Tracker" = "https://gitee.com/pdudo/golearn/issues"
其中,有三個(gè)大項(xiàng),分為為:
- build-system:包的依賴環(huán)境。
- project:項(xiàng)目?jī)?nèi)容。
- project.urls:項(xiàng)目
URL
。
build-system
是構(gòu)建包所需的列表信息。
在project
下,其中name
、version
、authors
、description
是包的基本信息,包括名稱、版本、作者 以及 包的簡(jiǎn)介等。
readme
是指定項(xiàng)目的說(shuō)明文件,一般而言是README.md
,requires-python
是該包所依賴的python
版本,classifiers
是python
包的元數(shù)據(jù)。
最后是project.urls
,它將在pypi
上顯示輸入的額外鏈接。
打包上傳至pypi
如果將pypi
包的格式做好了,那么恭喜你,就可以開(kāi)始打包了,在進(jìn)行正式打包之前,我們需要安裝相關(guān)依賴:
基本工具安裝
安裝打包工具build
pip3 install build
如果網(wǎng)絡(luò)很差的時(shí)候,可以考慮下使用第三方源,例如清華,安裝build
命令為:
pip3 install build -i https://pypi.tuna.tsinghua.edu.cn/simple
使用build進(jìn)行打包
開(kāi)始打包的時(shí)候,需要進(jìn)入JuejinPdudoProject
,和pyproject.toml
處于同一目錄,使用如下命令進(jìn)行打包:
python3 -m build
在此過(guò)程中,它會(huì)常見(jiàn)虛擬環(huán)境,安裝構(gòu)建依賴,而后開(kāi)始按照文件內(nèi)容,進(jìn)行打包。
如果成功的話,會(huì)出現(xiàn)Successfully built juejinPdudoProject-0.0.2.tar.gz and juejinPdudoProject-0.0.2-py3-none-any.whl
類似的信息:
如果此時(shí)我們?cè)偈褂?code>tree命令查看當(dāng)前目錄下結(jié)構(gòu):
我們會(huì)發(fā)現(xiàn),此時(shí)多了一個(gè)目錄dist
,里面正是我們打包的包。
使用twine上傳至pypi
在當(dāng)前目錄下,使用命令
python3 -m twine upload --repository testpypi dist/* --verbose
就可以將包上傳至pypi
了,在此過(guò)程中,會(huì)讓我們輸入用戶名和密碼,還記得我們注冊(cè)pypi
的時(shí)候生成過(guò)一個(gè)API tokens
,上傳的時(shí)候會(huì)用到此信息。
這個(gè)就證明上傳pypi
成功了。此時(shí)再打開(kāi)頁(yè)面,就可以看到相關(guān)內(nèi)容了:
此時(shí)打開(kāi)pypi
網(wǎng)頁(yè),就可以看到我們創(chuàng)建的項(xiàng)目了:
從pypi下載包測(cè)試代碼
這里,我們根據(jù)網(wǎng)站提示下載包:
我們這次在windows
終端下安裝該包:
我們這次在windows
終端下安裝該包:
在瀏覽器進(jìn)行測(cè)試后,可得
由此證明上傳的包沒(méi)有問(wèn)題。
總結(jié)
本篇文章介紹了什么是pypi
,以及打包的格式,最后打包完畢后,將包上傳至pypi
。這里有幾個(gè)細(xì)節(jié)可以注意一下,當(dāng)我們打包后,會(huì)得到一個(gè)dist
目錄,在該目錄下,有一個(gè)結(jié)尾為.whl
的文件,我們可以直接通過(guò)pip install
跟上文件名來(lái)安裝一下包,若包沒(méi)問(wèn)題后,我們就可以上傳到pypi
了。還有pypi
有一個(gè)很嚴(yán)格的措施,為了安全,pypi
不允許重復(fù)使用項(xiàng)目,即使該項(xiàng)目被刪除了并再次上傳也不行,這是要方式項(xiàng)目被惡意更改,所以刪除就再也不存在該項(xiàng)目了,還有一點(diǎn),如果只是測(cè)試上傳pypi
,請(qǐng)使用test.pypi.org。
以上就是一文詳解python如何將編寫的模塊打包上傳至pypi的詳細(xì)內(nèi)容,更多關(guān)于python模塊打包上傳至pypi的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
使用Flask和Django中解決跨域請(qǐng)求問(wèn)題
這篇文章主要介紹了使用Flask和Django中解決跨域請(qǐng)求問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-04-04pip/anaconda修改鏡像源,加快python模塊安裝速度的操作
這篇文章主要介紹了pip/anaconda修改鏡像源,加快python模塊安裝速度的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-03-03Python?pandas修剪函數(shù)clip使用實(shí)例探究
在數(shù)據(jù)處理和分析中,經(jīng)常面臨著需要限制數(shù)據(jù)范圍的情況,而pandas庫(kù)提供的clip函數(shù)就是一個(gè)強(qiáng)大的工具,可以方便地對(duì)數(shù)據(jù)進(jìn)行修剪,本文將深入介紹clip函數(shù)的基本用法、常見(jiàn)參數(shù)以及實(shí)際場(chǎng)景中的應(yīng)用,以幫助大家充分理解并靈活運(yùn)用這一功能2024-01-01python使用socket遠(yuǎn)程連接錯(cuò)誤處理方法
這篇文章主要介紹了python使用socket遠(yuǎn)程連接錯(cuò)誤處理方法,可有效的獲取Python中socket連接錯(cuò)誤處理的相關(guān)信息,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04python 實(shí)現(xiàn)二維數(shù)組的索引、刪除、拼接操作
這篇文章主要介紹了python 實(shí)現(xiàn)二維數(shù)組的索引、刪除、拼接操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-05-05Python多叉樹(shù)的構(gòu)造及取出節(jié)點(diǎn)數(shù)據(jù)(treelib)的方法
今天小編就為大家分享一篇Python多叉樹(shù)的構(gòu)造及取出節(jié)點(diǎn)數(shù)據(jù)(treelib)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08Python?tkinter實(shí)現(xiàn)計(jì)算器功能
這篇文章主要為大家詳細(xì)介紹了Python?tkinter實(shí)現(xiàn)計(jì)算器功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01