答案:发布Python包需准备pyproject.toml(定义元数据和依赖)、README.md(项目说明)、LICENSE(授权条款)、__init__.py(声明包)和.gitignore(忽略无关文件),并通过build构建分发文件、twine上传至PyPI或TestPyPI测试,确保包可安装、功能正常且元数据无误。

发布一个自己的Python包到PyPI,核心流程可以概括为:准备好你的项目结构和元数据,使用构建工具生成分发文件,最后通过
twine
说实话,第一次尝试发布Python包到PyPI,我脑子里也一堆问号,各种配置文件和命令,感觉像在走迷宫。但走过一遍,你会发现它其实有一套清晰的逻辑。关键在于,我们要把自己的代码和相关信息,按照PyPI能理解的方式“打包”好。
这个过程,我们通常会从项目的结构开始。一个典型的Python包项目,它应该有一个清晰的目录结构,比如:
your_package_name/ ├── src/ │ └── your_package_name/ │ ├── __init__.py │ └── your_module.py ├── tests/ │ └── test_your_module.py ├── pyproject.toml ├── README.md ├── LICENSE └── .gitignore
这里
src
pyproject.toml
setup.py
setup.cfg
立即学习“Python免费学习笔记(深入)”;
接下来,就是配置
pyproject.toml
然后,你需要安装一些工具来帮助你构建和上传。
build
sdist
wheel
twine
pip install build twine
有了工具,就可以开始构建了。在项目根目录下运行
python -m build
dist/
.tar.gz
.whl
在真正上传到PyPI之前,强烈建议你先上传到TestPyPI。这就像是一个模拟的PyPI环境,你可以测试你的包是否能被正确安装、导入和使用,而不会污染真实的PyPI。命令大概是
twine upload --repository testpypi dist/*
确认在TestPyPI上一切正常后,你就可以放心地上传到真正的PyPI了。命令是
twine upload dist/*
要发布一个Python包,我们手头得有几份关键的“档案”,它们各自扮演着不可或缺的角色,缺了哪个都可能让你的包发布不顺利,或者即便发布了,用户也用得一头雾水。
首先,也是最重要的,是pyproject.toml
name
version
description
license
authors
urls.homepage
dependencies
setuptools
flit
其次是README.md
pyproject.toml
readme = "README.md"
然后是license
接着是你的包的核心代码文件。这通常位于一个与包名同名的目录中,比如
src/your_package_name/
__init__.py
your_module.py
最后,虽然不是发布必需,但强烈建议包含.gitignore
pyproject.toml
pyproject.toml
setup.py
pyproject.toml
[project]
[build-system]
1. [build-system]
setuptools
[build-system] requires = ["setuptools>=61.0", "wheel"] build-backend = "setuptools.build_meta"
requires
setuptools
wheel
.whl
build-backend
setuptools.build_meta
setuptools
2. [project]
[project]
name = "your-package-name" # 包名,在PyPI上是唯一的
version = "0.1.0" # 包的版本号,遵循语义化版本规范
description = "A short description of your awesome package." # 简短描述
readme = "README.md" # 指定README文件,内容会显示在PyPI页面
requires-python = ">=3.8" # 包运行所需的Python版本
license = { file = "LICENSE" } # 指定许可证文件
authors = [
{ name = "Your Name", email = "your.email@example.com" },
]
keywords = ["python", "utility", "example"] # 关键词,方便搜索
classifiers = [ # 分类器,帮助用户在PyPI上筛选和发现你的包
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
"Development Status :: 3 - Alpha", # 开发状态,例如Alpha, Beta, Production/Stable
]
dependencies = [ # 运行时依赖,pip install your-package-name 时会安装这些
"requests>=2.20.0",
"beautifulsoup4",
]
[project.urls] # 项目相关的URL链接
homepage = "https://github.com/yourusername/your-package-name"
repository = "https://github.com/yourusername/your-package-name"
documentation = "https://your-package-name.readthedocs.io/"name
version
1.0.0
0.5.1-beta
description
readme
README.md
requires-python
">=3.8"
license
license
text
authors
keywords
classifiers
dependencies
pip
3. [project.scripts]
[project.entry-points."console_scripts"]
[project.scripts] your-command = "your_package_name.module:main_function" # 例如:your-command 会执行 your_package_name/module.py 里的 main_function
或者,更推荐使用
entry-points
[project.entry-points."console_scripts"] your-command = "your_package_name.module:main_function"
这会创建一个可执行的脚本,用户可以直接在命令行输入
your-command
配置
pyproject.toml
name
version
requires-python
dependencies
在满怀信心地将你的Python包推送到PyPI之前,进行一系列严谨的测试和验证是至关重要的。这就像产品发布前的质量检测,能帮你避免很多不必要的麻烦,比如用户安装失败、功能不正常或者依赖冲突。我个人经验告诉我,这些步骤绝不能省。
首先,也是最基础的,是本地安装测试。在你构建完分发文件(
dist/
.whl
.tar.gz
pip install dist/your_package_name-0.1.0-py3-none-any.whl # 或者通过源码安装 pip install dist/your_package_name-0.1.0.tar.gz
安装完成后,尝试导入你的包,并运行其中的一些核心功能,确保一切按预期工作。如果你的包提供了命令行工具,也要尝试运行它们。这个步骤能帮你发现诸如
setup.py
pyproject.toml
其次,运行单元测试和集成测试。你的项目应该包含一套完整的测试用例(通常放在
tests/
pytest
unittest
# 假设你使用 pytest pip install pytest pytest tests/
再者,使用twine check
twine
check
dist/
README.md
twine check dist/*
这个命令会给你一些有用的警告或错误信息,比如Markdown渲染问题,或者一些潜在的兼容性问题。及时修正这些问题,能确保你的包在PyPI页面上展示良好,并且不会因为格式问题被拒绝。
最后,也是最关键的,是上传到TestPyPI进行预发布测试。TestPyPI是一个与真实PyPI镜像的测试环境,你可以将你的包上传到这里,模拟真实的发布过程,而不会影响到PyPI上的正式包。
twine upload --repository testpypi dist/*
你需要先在TestPyPI上注册一个账号,并生成一个API token。上传成功后,你可以像在PyPI上一样,通过
pip install --index-url https://test.pypi.org/simple/ --no-deps your-package-name
以上就是如何发布一个自己的Python包到PyPI?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号