怎样创建Python包 [2023]
Python是基于一个2023 Stackoverflow survey的第三常用编程语言。这种通用目的可以用于数据科学、网站开发、机器学习、软件工程和科学计算。
Python包是你在学习和使用Python语言时会遇到的术语之一。Python包是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应用程序。Scikit-learn、PyTorch和TensorFlow是机器学习领域中流行的包。
Python包的重要性
作为程序员,为什么不从头开始创建所有东西?我们是否需要Python包?以下是Python包重要的一些原因:
- 节省时间:Python包为您提供了访问预先编写的解决常见问题的代码的方式。每当您想编写Python脚本时,可以使用Python包而不是重新发明轮子。
- 便于分发代码:在编程中,合作是非常常见的。您可以创建一个Python包,供团队成员在合作项目时随时导入。
- 代码可重用性:如果您在自己的Python程序中经常重复编写某个代码块,可以将其打包并在应用程序中进行导入。
- 代码组织:Python包允许您将代码组织成逻辑模块。这种方法使得阅读和维护Python代码变得更加容易。
如何创建您的第一个Python包
我们已经提到Python是一种通用语言。作为程序员,您可以创建不同类型的包。
例如,您可以创建一个自动化某些任务的包,一个帮助您预算的包,甚至学习一种新语言的包。但是,在开始创建您的第一个包之前,您需要以下准备工作:
先决条件:
- 已在本地机器上安装Python。如果您使用Linux,则Python已默认安装在您的操作系统中。您可以使用以下命令 python –version 或 python3 –version 检查Python是否已安装。如果已安装Python,您将在终端上看到类似于以下内容的输出:
如果没有安装Python,您可以在 https://www.python.org/downloads/ 下载它。
- 了解Python。您需要了解如何编写Python类、模块和函数。
- 软件包管理器。我们将使用
pip
进行演示。您可以使用以下命令检查是否已安装pip:
pip --version
如果已安装,您将在终端上看到类似的输出。
要安装的软件包的要求可能会有所不同。
我将创建一个简单的Python软件包,以演示如何检查一个数字是否是素数。您可以按照以下步骤进行操作:
- 第一步:创建一个项目文件夹,我将命名为
primechecker
。 - 第二步:在
primechecker
文件夹中创建另一个文件夹,命名为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
- 第五步:测试您的代码。我们可以在根文件夹中的一个
test.py
文件中创建一个脚本,用于检查一个数字是否是素数。返回到主文件夹并使用以下命令:
touch test.py
然后,您可以将以下代码添加到此文件中:
from prime.prime import is_prime
number = int(input("输入一个数字:"))
result = is_prime(number)
print(f"{number} 是素数:{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='用于检查素数的软件包',
packages=find_packages(),
)
将名称、作者、作者电子邮件和描述更改为适合您的软件包详情。
- 第三步:构建您的软件包。在仍然在根文件夹中的情况下运行此命令:
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)是次要版本,最后一部分是修订版本。
- 指定所有依赖项:根据您的需求,您的软件包中可能包含各种依赖项或其他软件包。您应在上传时在软件包的描述中提及所有依赖项。您可以使用setuptools或poetry等工具添加和管理这些依赖项。
- 使用版本控制:编程是一个持续的过程。您可能不断升级或改进您的软件包,添加新功能或使其更高效。您可能还想邀请贡献者。您可以将软件包代码上传到GitHub或GitLab等平台,使您的代码可访问并允许协作。
- 文档化您的代码:我们创建的软件包仅用于演示目的。但是,如果您打算与公众或团队成员共享这样的软件包,您必须生成指导用户的文档。您可以使用Pydoc或Sphinx等工具生成文档。
我还可以在哪里上传Python软件包?
尽管Python软件包索引(PyPI)是Python软件包的官方存储库,但这并不意味着您受到限制。在确定要上传Python软件包的位置时,需考虑文件大小、软件包性质、所需支持级别和目标受众。
您可以上传Python软件包的其他地方包括:
- GitHub:GitHub是最大的代码托管平台。您可以创建一个仓库,并将您的Python软件包作为zip文件添加以重新分发。
- Conda:Conda是一个可以用于Python软件包的软件包管理器。该平台在数据科学家中很受欢迎。在Conda上创建一个帐户,并开始上传您的软件包以便重新分发。
- PyPI镜像:有许多PyPI镜像可以镜像PyPI平台的内容。选择一个适合您需求的镜像来托管您的软件包。
结论
您现在掌握了创建Python软件包并将其发布在线的步骤。我们的示例只是基本的,但您可以进行各种尝试并创建复杂的软件包。然而,在构建Python软件包时,始终创建正确的文件夹结构。