Python 包的概念及创建方法详解
根据 2023 年 Stack Overflow 的调查数据,Python 稳居第三大最受欢迎的编程语言。其广泛的应用领域涵盖了数据科学、Web 开发、机器学习、软件工程以及科学计算等多个方面。
在学习和使用 Python 过程中,“包”是经常会遇到的一个概念。 那么,究竟什么是 Python 包? 又该如何创建它们呢?
本文将深入探讨以下几个方面:
- 定义 Python 包
- 阐述 Python 包在编程中的重要性
- 演示 Python 包的创建流程
- 展示 Python 包的使用和测试方法
- 指导如何上传 Python 包
什么是 Python 包?
Python 包是编程中至关重要的组成部分。 如果没有包,开发者可能需要从头开始编写所有代码,这将使编程过程变得冗长而艰巨。 简单来说,Python 包就是 Python 模块的集合,本质上是可重用的代码库。
模块是包含 Python 代码的文件,这些代码可以被导入到其他 Python 程序中使用。 要创建一个 Python 包,必须将代码存放在一个目录中,并且该目录中必须包含一个名为 `__init__.py` 的文件。
一个 Python 包可以包含其他的包(形成嵌套结构),并且网络上存在着数以千计的 Python 包。 其中一些是官方维护的,而另一些则是由社区开发者贡献的。 大多数 Python 包都可以在 https://pypi.org/ 上找到。
例如,Django 是一个 Python Web 框架,就是一个可用于构建 Web 应用程序的包。 而 Scikit-learn、PyTorch 和 TensorFlow 则是机器学习领域常用的包。
Python 包的重要性
为什么开发者不从头开始构建所有内容? 我们真的需要 Python 包吗? 以下是 Python 包如此重要的几个原因:
- 节省时间:Python 包提供了预先编写好的代码,用于解决常见的编程问题。 当需要编写 Python 脚本时,可以直接利用现有的包,而无需重复造轮子。
- 简化代码分发:在编程中,协作非常普遍。 可以创建一个 Python 包,方便团队成员在协作项目时直接导入使用。
- 代码复用:如果某些代码块需要在多个 Python 程序中使用,可以将其打包成一个包,然后在需要时导入。
- 代码组织:Python 包允许将代码组织成逻辑模块,从而更容易阅读和维护 Python 代码。
如何创建你的第一个 Python 包
我们已经提到,Python 是一种通用语言。 作为开发者,可以创建各种类型的包。
例如,可以创建一个自动执行某些任务的包,一个帮助管理预算的包,甚至一个用于学习新语言的包。 在开始创建第一个包之前,需要确保以下几点:
先决条件:
- 本地计算机上已安装 Python。 在 Linux 系统中,Python 通常会默认安装。 可以使用 `python –version` 或 `python3 –version` 命令来检查 Python 是否已安装。 如果已安装,终端会显示类似于以下内容:
如果没有安装 Python,可以从 https://www.python.org/downloads/ 下载。
- 对 Python 的基本理解。 需要了解如何编写 Python 类、模块和函数。
- 包管理器。 我们将使用 pip 进行演示。 可以使用 `pip –version` 命令来检查 pip 是否已安装。
如果已安装,终端会显示类似于以下内容:
根据要创建的包的性质,可能还会有其他要求。
为了演示,我们将创建一个简单的 Python 包,用于检测一个数字是否为质数。 请跟随以下步骤:
- 第一步:创建项目文件夹。 我们将该文件夹命名为 `primechecker`。
- 第二步:在 `primechecker` 文件夹中创建一个新的文件夹,并命名为 `prime`。
- 第三步:在第二步创建的 `prime` 文件夹中,创建一个名为 `prime.py` 的文件。 可以使用以下命令组合这三个步骤:
mkdir primechecker && cd primechecker && mkdir prime && cd prime && touch prime.py
- 第四步:使用代码编辑器打开项目。 将以下代码添加到 `prime.py` 文件中,用于判断一个数字是否为质数:
def is_prime(number): if number < 2: return False for i in range(2, int(number ** 0.5) + 1): if number % i == 0: return False return True
- 第五步:在 `prime` 文件夹中,创建一个名为 `__init__.py` 的文件。 这个文件会使 Python 将项目文件夹识别为一个包。
可以使用以下命令创建:
touch prime/__init__.py
- 第六步:测试代码。 在根文件夹(即 `primechecker` 文件夹)中,创建一个名为 `test.py` 的文件,用于测试数字是否为质数。 先返回到主文件夹,然后使用此命令:
touch test.py
然后将以下代码添加到 `test.py` 文件中:
from prime.prime import is_prime number = int(input("Enter a number: ")) result = is_prime(number) print(f"{number} is prime: {result}")
运行以下命令测试代码:
python3 test.py
现在可以输入一个数字,并查看它是否是质数。
例如,我们分别测试了 5 和 1,并得到如下结果:
如何在线上传包
可以将创建的包托管在 PyPI(Python 包索引)上。 这是一个包含数千个 Python 包的中央仓库。 如果没有账户,请访问 https://pypi.org/ 创建一个。
接下来,按照以下步骤在线上传包:
- 第一步:在根文件夹(即 `primechecker` 文件夹)中创建一个名为 `setup.py` 的文件。
- 第二步:修改 `setup.py` 文件内容,包含要上传的包的相关信息。
该文件的代码应如下所示:
from setuptools import setup, find_packages setup( name="primechecker", version='1.0.0', author="Your Name", author_email="[email protected]", description='A package for checking prime numbers', packages=find_packages(), )
修改 `name`(包名)、`author`(作者名)、`author_email`(作者邮箱)和 `description`(包描述)等信息,使其与你的包匹配。
- 第三步:构建包。 仍然在根文件夹内,运行以下命令:
python3 setup.py sdist bdist_wheel
如果查看项目文件夹,可以在根文件夹中看到两个新文件夹(`build` 和 `dist`)。
- 第四步:安装 twine。 这是上传包到 PyPI 所需的工具。
使用以下命令进行安装:
pip install twine
- 第五步:上传包。
使用以下命令:
twine upload dist/*
系统会提示输入用户名和密码。 如果你的包名未被占用,该包就会被发布到线上,并且终端会返回一个链接。
现在,你发布的包已对公众开放。 任何想要使用该包的用户都可以使用 pip 下载它。
例如,我们发布的包可以通过以下命令下载:
pip install primechecker==1.0.0
创建 Python 包的最佳实践
- 遵循 Python 打包标准:虽然可以自由决定要创建的包类型,但仍然需要遵守 Python 包的规范。 在开始编写代码之前,请查阅 https://packaging.python.org/ 上的相关标准。
- 在部署前测试包:错误在编程中很常见。 特别是在构建大型包时,需要创建自动化测试脚本。 这有助于确保上传的包没有错误。
- 版本控制:合适的包应遵循语义版本控制。 在我们的演示中,包的版本号为 1.0.0。 第一位 (1) 代表主版本,第二位 (0) 代表次版本,最后一位 (0) 代表补丁。
- 明确所有依赖项:根据需求,包可能依赖于其他的包。 在上传时,应在包的描述中提及所有依赖项。 可以使用 setuptools 或 Poetry 等工具来添加和管理这些依赖项。
- 使用版本控制系统:编程是一个持续的过程。 可以不断升级和改进包,以添加新功能或提高效率。 还可以邀请其他开发者参与贡献。 可以将包代码上传到 GitHub 或 GitLab 等平台,方便他人访问并进行协作。
- 编写代码文档:我们创建的包仅用于演示。 如果要与公众或团队成员分享,必须生成用户文档。 可以使用 Pydoc 或 Sphinx 等工具来生成文档。
我还可以在哪里上传 Python 包?
虽然 Python 包索引 (PyPI) 是 Python 包的官方存储库,但并不意味着只能在此处上传。 在选择包的托管位置时,需要考虑的因素包括文件大小、包的性质、所需的支持级别以及目标受众。
以下是一些可以上传 Python 包的其它平台:
- GitHub:GitHub 是最大的代码托管平台。 可以创建仓库,并将 Python 包添加为 zip 文件进行分发。
- Conda:Conda 是一个用于 Python 包的包管理器。 它在数据科学家中很受欢迎。 在 Conda 上创建一个账户,即可开始上传包并进行分发。
- PyPI Mirrors:有很多 PyPI 镜像站点,它们复制 PyPI 平台上的内容。 可以选择一个符合需求的镜像站点。
结论
现在,您已经了解了创建 Python 包并将其发布到在线平台的基本步骤。 我们的示例只是一个基础,但您可以尝试创建更复杂的包。 无论如何,在构建 Python 包时,始终要确保正确的文件夹结构。