Python包發(fā)布到PyPI的實(shí)現(xiàn)步驟
本文將詳細(xì)介紹如何使用 pyproject.toml 配置將 Python 包發(fā)布到 PyPI,包括完整的配置示例、構(gòu)建命令和故障排除方法。
?? 項(xiàng)目配置
基礎(chǔ) pyproject.toml 配置
[build-system]
requires = ["setuptools>=61.0", "wheel"]
build-backend = "setuptools.build_meta"
[project]
name = "your-package-name"
version = "0.1.0"
authors = [
{name = "Your Name", email = "you@example.com"}
]
description = "A short description of your package"
readme = {file = "README.md", content-type = "text/markdown"}
license = {text = "MIT"}
classifiers = [
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
]
requires-python = ">=3.7"
dependencies = [
"click>=8.1",
]
[project.urls]
Homepage = "https://github.com/yourusername/your-package"
[project.scripts]
your-command = "your_package.module:main"
[tool.setuptools]
packages = {find = {}}
完整配置說明
關(guān)鍵字段說明:
name: PyPI 包名(使用連字符-)version: 遵循語義化版本控制readme: 支持 Markdown 或 reStructuredTextclassifiers: 幫助用戶找到你的包requires-python: 指定 Python 版本兼容性
包名約定:
- PyPI 包名:
your-package-name(使用連字符) - 導(dǎo)入模塊名:
your_package(使用下劃線) - 用戶通過
import your_package導(dǎo)入
??? 工具安裝
# 安裝構(gòu)建和上傳工具 pip install --upgrade build twine setuptools wheel # 驗(yàn)證安裝 python -m build --version twine --version
?? 構(gòu)建流程
1. 清理構(gòu)建環(huán)境
# 清理舊的構(gòu)建文件 rm -rf dist/ build/ *.egg-info/
2. 構(gòu)建包
# 構(gòu)建源碼包和 wheel 包 python -m build # 構(gòu)建結(jié)果 ls dist/ # your-package-name-0.1.0.tar.gz # your-package-name-0.1.0-py3-none-any.whl
3. 驗(yàn)證包
# 檢查元數(shù)據(jù) twine check dist/* # 查看包內(nèi)容 unzip -l dist/*.whl | head -10
?? 發(fā)布到 PyPI
1. 準(zhǔn)備 PyPI 賬號(hào)
- 注冊(cè) PyPI 賬號(hào)
- 在賬號(hào)設(shè)置中創(chuàng)建 API Token
- 作用域選擇 “Entire account (all projects)”
2. 上傳包
# 上傳到正式 PyPI twine upload dist/* # 使用 API Token 認(rèn)證 # 用戶名: __token__ # 密碼: pypi-xxxxxxxxxxxxxxxxxxxx
3. 測(cè)試安裝
# 驗(yàn)證發(fā)布成功 pip install your-package-name
?? 測(cè)試環(huán)境發(fā)布
推薦先在 TestPyPI 測(cè)試:
# 注冊(cè) TestPyPI 賬號(hào) # 訪問 https://test.pypi.org # 上傳到測(cè)試環(huán)境 twine upload --repository-url https://test.pypi.org/legacy/ dist/* # 從測(cè)試環(huán)境安裝 pip install --index-url https://test.pypi.org/simple/ your-package-name
?? 常見問題解決
1. 元數(shù)據(jù)缺失錯(cuò)誤
ERROR: InvalidDistribution: Metadata is missing required fields: Name, Version
解決方案:
# 升級(jí) twine 到最新版本 pip install --upgrade twine # 使用模塊方式運(yùn)行 python -m twine check dist/*
2. 包名沖突
HTTPError: 400 Client Error: The name 'your-package' is already in use
解決方案:
- 在
pyproject.toml中修改name字段 - 確保包名在 PyPI 上唯一
3. 版本沖突
HTTPError: 400 Client Error: File already exists
解決方案:
- 在
pyproject.toml中更新version字段 - 刪除已上傳的錯(cuò)誤版本(通過 PyPI 管理界面)
?? 發(fā)布檢查清單
- 更新
pyproject.toml中的版本號(hào) - 確保 README.md 內(nèi)容完整且格式正確
- 驗(yàn)證所有依賴項(xiàng)已正確聲明
- 測(cè)試本地安裝:
pip install dist/your-package-*.whl - 檢查包名在 PyPI 上的可用性
- 準(zhǔn)備好 PyPI API Token
?? 版本管理最佳實(shí)踐
語義化版本控制:
主版本.次版本.修訂版本- 不兼容的 API 修改:主版本號(hào)遞增
- 向下兼容的功能性新增:次版本號(hào)遞增
- 向下兼容的問題修正:修訂版本號(hào)遞增
發(fā)布流程:
# 1. 更新版本號(hào) # 編輯 pyproject.toml: version = "0.1.1" # 2. 提交更改 git add pyproject.toml git commit -m "Bump version to 0.1.1" git tag v0.1.1 # 3. 構(gòu)建和發(fā)布 rm -rf dist/ build/ *.egg-info/ python -m build twine upload dist/*
?? 高級(jí)配置
包含數(shù)據(jù)文件
[tool.setuptools] include-package-data = true [tool.setuptools.package-data] "your_package.data" = ["*.json", "*.txt"]
可選依賴項(xiàng)
[project.optional-dependencies] dev = ["pytest>=6.0", "black"] gui = ["tkinter", "pyqt5"]
多平臺(tái)腳本
[project.scripts] my-cli = "my_package:main" [project.gui-scripts] my-gui = "my_package.gui:main"
?? 總結(jié)
通過本指南,你可以:
- 正確配置
pyproject.toml文件 - 使用現(xiàn)代工具鏈構(gòu)建 Python 包
- 安全地將包發(fā)布到 PyPI
- 解決常見的發(fā)布問題
發(fā)布后,用戶可以通過 pip install your-package-name 安裝你的包,讓你的代碼為社區(qū)所用!
本文基于實(shí)際項(xiàng)目經(jīng)驗(yàn)整理,適用于 Python 3.7+ 和現(xiàn)代打包工具鏈。到此這篇關(guān)于Python包發(fā)布到PyPI的實(shí)現(xiàn)步驟的文章就介紹到這了,更多相關(guān)Python包發(fā)布到PyPI內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python 200行代碼實(shí)現(xiàn)一個(gè)滑動(dòng)驗(yàn)證碼過程詳解
這篇文章主要介紹了Python 200行代碼實(shí)現(xiàn)一個(gè)滑動(dòng)驗(yàn)證碼過程詳解,各種各樣的驗(yàn)證碼,比較高級(jí)的有滑動(dòng)、點(diǎn)選等樣式,看起來好像挺復(fù)雜的,但實(shí)際上它們的核心原理還是還是很清晰的,本文章大致說明下這些驗(yàn)證碼的原理以及帶大家實(shí)現(xiàn)一個(gè)滑動(dòng)驗(yàn)證碼2019-07-07
python 使用cycle構(gòu)造無限循環(huán)迭代器
這篇文章主要介紹了python 使用cycle構(gòu)造無限循環(huán)迭代器的方法,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下2020-12-12
pytorch中實(shí)現(xiàn)彩色圖像(三通道)轉(zhuǎn)灰度圖像(單通道)
這篇文章主要介紹了pytorch中實(shí)現(xiàn)彩色圖像(三通道)轉(zhuǎn)灰度圖像(單通道),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02
對(duì)pandas的dataframe繪圖并保存的實(shí)現(xiàn)方法
下面小編就為大家?guī)硪黄獙?duì)pandas的dataframe繪圖并保存的實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-08-08

