發佈你本身的輪子 - PyPI打包上傳實踐

本文僅討論上傳相關的步驟,關於如何給寫一個setup.py 請參閱官方文檔:html

上傳前的注意事項

  • 假設你的包已經開發完成,而且根目錄必需要有一個setup.py
  • 最好有一個README.rst 用來描述你的輪子,雖然這不是必須的,但文檔就像內褲,你最好仍是要有的。
  • 若是你須要打包代碼文件夾之外的文件,好比版權信息等等,你還須要寫一個 MANIFEST.in

關於setup.py的補充說明

  • name 必須是惟一的,容許使用數字和字母,推薦使用中劃線(-)而不是下劃線(_),由於pip安裝只支持中劃線,好比pip install my-pkg,爲了避免給本身找麻煩請聽話。
  • version推薦遵循語義化版本號規則,簡單說就像這樣:1.2.0
  • 做者姓名和郵箱地址不必定要和你的PyPI帳號一致。

測試本地打包命令

若是上面的都沒問題,在本地目錄執行如下命令應該能成功在dist目錄下生成*.tar.gz的包文件。python

python setup.py sdist

上傳併發布包文件到PyPI

建立 PyPI帳號

很是簡單,直接經過官網註冊 https://pypi.python.org/pypi?..., 可是須要驗證郵件並確認激活。git

建立用戶驗證文件 ~/.pypirc

在本身的用戶目錄下新建一個空白文件命名爲.pypirc,內容以下:github

[distutils]
index-servers=pypi

[pypi]
repository = https://upload.pypi.org/legacy/
username = <username>
password = <password>

用戶名和密碼就是上一步驟所建立的,直接明文輸入。若是你以爲明文密碼不安全也能夠留空,在後面的上傳過程當中會提示你手動輸入。shell

註冊你的包

你須要到PyPI註冊並驗證你的包,以後才能開始真正上傳,註冊的方式有如下幾種。安全

  1. 使用命令python setup.py register,最簡單但官網不推薦,由於使用的是HTTP未加密,有可能會被攻擊人嗅探到你的密碼。
  2. 經過PyPI網站提交表單完成註冊驗證。
  3. 安裝 pip install twine 而後在經過命令 twine register dist/mypkg.whl 完成註冊。

上傳並完成發佈

你能夠任選如下兩種方式之一發布你的輪子。網絡

  1. 使用命令:python setup.py sdist upload,仍是和上面同樣,簡單但有安全隱患,目前已淘汰
  2. 使用 twinetwine upload dist/*

管理你的包

若是你的包已經上傳成功,那麼當你登陸PyPI網站後應該能在右側導航欄看到管理入口。併發

pypi_manage

點擊包名進去後你能夠對你的包進行管理,固然你也能夠從這裏刪除這個包。測試

讓別人使用你的包

包發佈完成後,其餘人只須要使用pip就能夠安裝你的包文件。好比:網站

pip install package-name

若是你更新了包,別人能夠能夠經過--update參數來更新:

pip install package-name --update

可能遇到的錯誤

Upload failed (403): Invalid or non-existent authentication information.

錯誤的用戶驗證信息,你須要建立一個用戶驗證文件 ~/.pypirc。請參閱上文。

Upload failed (403): You are not allowed to edit 'xxx' package information

你須要先註冊你的包才能夠開始上傳,運行註冊命令:python setup.py register

Server response (401): Incomplete registration; check your email

你的PyPI帳戶還沒完成郵箱驗證,你須要去註冊郵箱找到一封驗證郵件完成驗證後再重試失敗的步驟。

Server response (400): Invalid classifier "Topic :: Software Development :: Utilities"

你的setup.py文件中的classifier信息有誤,請按官網的正確分類書寫classifier.

error: No dist file created in earlier command

你還沒打包就開始了上傳命令,建議打包和上傳的操做放在一塊兒作,好比:

python setup sdist upload

error: Upload failed (499): Client Disconnected

這應該是網絡問題,多重試幾回。

Upload failed (400): File already exists

文件已經存在了,你每一次上次都應該更新版本號。

參考文檔

關於做者:Python技術愛好者,目前從事測試開發相關工做,轉載請註明原文出處。

歡迎關注個人博客 https://betacat.online,你能夠到個人公衆號中去當吃瓜羣衆。

Betacat.online

相關文章
相關標籤/搜索