在这篇文章中,我将向你展示如何创建一个 Python 包,然后将其打包并发布到 Python 包索引(PyPI)上。这是一个非常实用的技能,可以让你的代码更容易被其他人使用和分享。
首先,我们需要创建一个项目文件夹,例如 packaging_tutorial
。在这个文件夹内,我们创建一个源代码文件夹 src
。然后,在 src
文件夹内创建你的包文件夹,例如 example_package_YOUR_USERNAME_HERE
。最后,在包文件夹内创建 __init__.py
和示例模块文件 example.py
。
项目结构如下:
packaging_tutorial/
├── LICENSE
├── pyproject.toml
├── README.md
├── src/
│ └── example_package_YOUR_USERNAME_HERE/
│ ├── __init__.py
│ └── example.py
└── tests/
接下来,我们需要在 pyproject.toml
文件中配置项目的元数据。这包括项目的名称、版本、作者、描述、Python 版本要求等信息。同时,我们还需要创建一个 LICENSE文件(模板)和一个 README.md
文件。
pyproject.toml
文件的内容如下:
[project]
name = "example_package_YOUR_USERNAME_HERE"
version = "0.0.1"
authors = [
{ name="Example Author", email="author@example.com" },
]
description = "A small example package"
readme = "README.md"
requires-python = ">=3.8"
classifiers = [
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
]
[project.urls]
Homepage = "https://github.com/pypa/sampleproject"
Issues = "https://github.com/pypa/sampleproject/issues"
# 构建后端,默认为 Hatchling
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
接下来,我们需要打包我们的项目。首先,我们需要安装打包工具 build
。然后,我们可以使用 build
命令来打包我们的项目。这将在 dist
目录下生成 .whl
和 .tar.gz
文件。
# 安装打包工具
python3 -m pip install --upgrade build
# 打包
python3 -m build
传统项目也使用写 setup.py
文件,然后通过 python setup.py sdist bdist_wheel
命令打包,因为长期以来 Setuptools
是 Python 项目打包的事实标准。使用 build
来打包是更现代的方式。
在上传我们的包之前,我们需要在 TestPyPI 上注册一个账号,并获取一个 Token。
接下来,我们需要安装上传工具 twine
,然后使用 twine
命令来上传我们的包。
# 安装上传 PyPI 的工具 twine
python3 -m pip install --upgrade twine
# 上传
python3 -m twine upload --repository testpypi dist/*
最后,我们可以安装我们的包并验证其功能。
# Install
# python3 -m pip install --index-url https://test.pypi.org/simple/ --no-deps example-package-YOUR-USERNAME-HERE
from example_package_YOUR_USERNAME_HERE import example
example.add_one(2)
如果一切都正常,我们可以将我们的包上传到正式的 PyPI 上。
更多内容可以参考官方指引 Python Packaging User Guide。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。