發布自己的Python包(Pypi)
我們經常使用 Pypi 來安裝包,但是有時候我們也想要發布自己的 Pypi 包,有可能我們寫了一個特別牛的包,也有可能我們只是想使用自己常用的一些輪子,可能這是我們日常編碼中很常用的一些輪子,我們在不同工程目錄、不同設備上都會頻繁使用的一些接口,可能我們自己對這些自己常用的接口很熟悉,但是卻因為環境的遷移而需要重復地實現,這時我們就可以發布一個自己的 Pypi 包,在環境遷移時使用熟悉的輪子只需要 pip install ***
即可。
就算這些輪子我們可能實現的沒有那么完美,”不足為外人道也“,但卻是我們最熟悉的,接口早已了然于心,因此這樣使用起來會很方便。
發布
注冊Pypi賬號
沒什么好多說的,出奇的簡單,不需要任何多余的東西,郵箱、用戶名、密碼即可。鏈接如下:
https://pypi.org/
開發自己的包
假設我想發布一個包,里面有我們常用的一些使用函數,包名稱為 SongUtils
,我們先完成功能的開發,都在 SongUtils
目錄下,得到目錄結構如下:
├── SongUtils
│ ├── AVAUtils.py
│ ├── ImgUtils.py
│ ├── MetricUtils.py
│ ├── README.md
│ └── __init__.py
__init__
文件是必須的,這是一個package的象征,可以什么都不寫,但必須有。
準備setup.py
setup.py
是構建我們的Python包的關鍵,它的位置與我們的整個工程目錄同級,包含了我們這個包的一些關鍵信息和依賴等,簡單的可以參考下面筆者第一次發布包時的 setup.py
文件內容,其中各項看其名稱即可一目了然,更詳細的各項參數的含義網上其他博客也有介紹,在此不再贅述:
#!/usr/bin/env python
#-*- coding:utf-8 -*-from setuptools import setup, find_packages #這個包沒有的可以pip一下setup(name = "SongUtils", #這里是pip項目發布的名稱version = "0.0.1", #版本號,數值大的會優先被pipkeywords = ["pip", "SongUtils"], # 關鍵字description = "Junjie's private utils.", # 描述long_description = "Junjie's private utils.",license = "MIT Licence", # 許可證url = "https://github.com/Adenialzz/SongUtils", #項目相關文件地址,一般是github項目地址即可author = "Adenialzz", # 作者author_email = "********@***.com",packages = find_packages(),include_package_data = True,platforms = "any",install_requires = ["numpy", "pillow"] #這個項目依賴的第三方庫
)
本地打包
完成 setup.py
文件后,我們的目錄樹如下:
├── SongUtils
│ ├── AVAUtils.py
│ ├── ImgUtils.py
│ ├── MetricUtils.py
│ ├── README.md
│ └── __init__.py
└── setup.py
然后在 setup.py
所在目錄下,我們運行它來將項目本地打包:
python setup.py sdist
沒有問題的話,在打包之后我們會得到如下目錄樹:
├── SongUtils
│ ├── AVAUtils.py
│ ├── ImgUtils.py
│ ├── MetricUtils.py
│ ├── README.md
│ └── __init__.py
├── SongUtils.egg-info
│ ├── PKG-INFO
│ ├── SOURCES.txt
│ ├── dependency_links.txt
│ ├── requires.txt
│ └── top_level.txt
├── dist
│ └── SongUtils-0.0.1.tar.gz
└── setup.py
上傳到Pypi服務器
首先在setup.py這一級的目錄下建立一個系統文件 .pypirc
內容如下:
[distutils]
index-servers = pypi[pypi]
username:你的PyPi用戶名
password:你的PyPi密碼
這里的用戶名密碼,就是我們第一步注冊時的賬號。
然后安裝一個上傳的工具來上傳即可:
pip install twine
twine upload dist/SongUtils-0.0.1.tar.gz
驗證
至此我們整個Python包的發布過程就已經完成了,我們可以(在其他機器)安裝來驗證一下:
pip install SongUtils
然后準備一個測試文件:
# test.py
import SongUtils# Call you functions to evaluate.
在測試文件中調用自己包中的函數,看測試是否正常工作:
python test.py
刪除
如果你想刪除自己的 Pypi 包,只需要登陸到自己的 Pypi 網站的賬戶,并進入到自己想要刪除的項目,然后選擇對應版本,點擊 Optins -> Delete 即可,過程中會要求你輸入刪除的版本號來防止誤刪除,在刪除后也會給你的郵箱發送郵件提醒。
但是,這不是一個好主意,因為前一個軟件包的所有用戶都會看到他們的安裝失敗。
如果要棄用程序包,可以執行的操作是使用指向新程序包的README發布最后一個發行版。有人為python-cli-ui做了那個,它被替換為cli-ui
你也可以:
setup.py
運行時添加警告- 或在導入時
- 或者用一個取決于新名稱的虛擬包替換包。
說明
這個過程只是一個簡單的 Python 包的發布過程,在過程中其實有許多需要注意的地方,比如 setup.py 文件應當寫的更加規范,整個包內的代碼也應當更加規范,應當有一個比較好的 Description 或者 README.md 文檔等等。這就留在以后有機會再說吧。
擴展閱讀:
python打包發布pypi踩坑記(最新貼心版本,認真對待自己的庫)
Ref:
https://www.cnblogs.com/suoyike1001/p/15216699.html
https://cloud.tencent.com/developer/ask/208868