Python

將自己的python package上傳到PyPI

跟著官方教學(以下稱作官網)與參考文章從不會到會花了我半天時間,但跟著做大致上不會出錯,此文章紀錄一些上傳到PyPI遇到的困難,大致上是在官網的文件上加上自己的理解與筆記。

建議順序

將package上傳至PyPI前的大致過程,因此以下幾點並非本文之後的大標題,建議按此順序上傳會比較順利

  • 上傳package到github
  • 撰寫README.md
  • 註冊TestPyPI
  • 跟著官網學習上傳package到TestPyPI
  • 註冊PyPI
  • 上傳到PyPI

—上傳前—

package檔案結構

以下是官網舉一個package上傳的範例,相當於自己寫好的python package原始狀態,但其實此專案底下有多個package也沒問題

packaging_tutorial (專案/資料夾)
└── example_pkg (package/資料夾)
  └── __init__.py (使example_pkg成為package/ py檔)
  └── modules.py (模組/ py檔)

接下來照著步驟開始建立setup.py、README.md、LICENSE三個檔案,其中tests是一個資料夾,完全照著官網做的話要留著,建立完後會如以下結構:

packaging_tutorial
├── LICENSE (授權文件/ txt檔)
├── README.md (package簡介/ md檔)
├── example_pkg
│  └── init.py
│  └── modules.py
├── setup.py (package基本資訊/ py檔)
└── tests (官網要求建立/資料夾)

setup.py

須注意官網中classifiers的部份,其中 “License :: OSI Approved :: MIT License",指的是package的授權,若是正式上傳到PyPI時要注意自己願意的授權方式 ; “Operating System :: OS Independent" 指的是此package在PyPI的分類類別,可於https://pypi.org/classifiers/挑選合適類別

README.md

若github有寫好便可直接使用,但注意不要放圖

LICENSE

package的授權文件,須注意要與setup.py中的授權方式一樣,可於https://choosealicense.com/挑授權方式,複製內容後存成txt檔

—上傳 TestPyPI—

更新setuptools和wheel

python3 -m pip install –user –upgrade setuptools wheel

再進入專案資料夾路徑,運行以下指令,會產生大量檔案

python3 setup.py sdist bdist_wheel

TestPyPI

登入TestPyPI並驗證信箱完畢後,先建立API tokens,路徑為右上角的帳號按鈕->Account settings ->API tokens。

API tokens

須注意tokens為提高安全性,當下建立的tokens只能使用這次,關掉網頁後就沒有了,因此先放在旁邊備用

上傳package

安裝Twine:

python3 -m pip install –user –upgrade twine

在同一專案資料夾路徑下運行以下程式碼,會上傳dist資料夾內所有檔案到TestPyPI上

python3 -m twine upload –repository testpypi dist/*

運行後會出現Enter your username,請輸入 __token__ ,password則使用剛剛放在旁邊備用的pypi- 開頭密碼,密碼複製貼上後不會顯示出來,貼一次就好(以為沒貼到貼了好幾次的我

成功的話會跑出Uploading 100%等字

下載package

查看package是否確實上傳到TestPyPI上,以及可否下載,路徑在右上角的帳號按鈕->Your projects->在自己的專案下點Manage->點入最上方含有簡短介紹的專案-> 複製 pip install -i https://test.pypi.org/simple/ example-pkg-YOUR-USERNAME-HERE->於終端機上運行下載

測試package

確認下載後自己的package是否能正常使用,或有缺漏等等。都確認正常後,就差最後一里路:正式上PyPI !

—正式上傳 PyPI—

註冊登入PyPI後,跟著本文標題的—上傳 TestPyPI— 的步驟全部再跑一次會比較順利,但在上傳package上傳dist資料夾內所有檔案的指令

python3 -m twine upload –repository testpypi dist/*

要換成

python3 -m twine upload dist/*

結語

最後可以直接用pip install來下載自己的package,超讚!

業配文:https://pypi.org/project/TimesML/