创建您自己的 Python 包

# 创建您自己的 Python 包

Python 是一种动态高级语言,它的简介、易读性和可扩展性使其成为数据科学家和机器学习工程师的首选。在使用 Python 时,我们经常需要使用大量的功能函数和脚本来完成特定的任务。为了更好地组织这些代码和功能,Python 支持将代码打包到 Python 包中。Python 包可以包含多个模块,这些模块是 Python 代码的集合,可以独立使用或作为 Python 应用程序的一部分。

在这篇文章中,我们将介绍如何创建您自己的 Python 包,了解 Python 包的结构、功能和创建步骤。

## 1. 准备工作

在开始创建 Python 包之前,请确保您已经安装了 Python。在开始创建 Python 包时,我们需要了解以下 Python 包所需的基本组件:

- 包目录结构及其文件作用

- 包元数据文件(setup.py)

- 使用的代码和依赖项

理解这些组件后,让我们开始创建 Python 包!

## 2. 包目录结构

创建 Python 包时,我们需要定义包目录结构。下面是一个通用的 Python 包的目录结构:

```

my_package/

├── my_package/

│ ├── __init__.py

│ ├── module_1.py

│ └── module_2.py

└── setup.py

```

该目录结构主要由两个目录组成:

- 包目录:该目录包含了您要组织到 Python 模块中的文件。这里,我们可以定义多个模块和子包。

- 元数据文件:包含有关包的元数据信息的文件,例如名称、版本、作者等。元数据文件使我们能够轻松地为我们的模块添加功能,例如依赖项管理和安装。

下面,我们将会详细介绍这两个目录的内容和作用。

### 2.1 包目录

包目录包含了用于组织 Python 模块的文件和子包。下面是一个包含两个模块的示例:

```

my_package/

└── my_package/

├── __init__.py

├── module_1.py

└── module_2.py

```

其中,__init__.py 是 Python 中的特殊文件,它指示 Python 解释器该目录应视为包。该文件通常是空文件,但也可以包含有关包的调用、导入和其他元数据信息。

其他文件(例如 module_1.py 和 module_2.py)是包中实际代码的文件。在一个典型的包中,我们可能有多个这样的模块,每个模块负责提供特定的功能或任务。

### 2.2 元数据文件

元数据文件是包含包信息和元数据的特殊 Python 文件。在 Python 中,我们使用 setup.py 文件来指定有关我们创建包的信息,例如名称、版本、描述等。我们还可以在元数据中指定其他用于打包、安装和分发包的信息。

在我们的示例中,setup.py 包含以下内容:

```

from setuptools import setup

setup(name='my_package',

version='0.1',

description='A sample Python package',

url='https://github.com/username/my_package',

author='Your Name',

author_email='your_email@example.com',

license='MIT',

packages=['my_package'],

install_requires=[

'numpy',

'pandas',

'matplotlib'

],

zip_safe=False)

```

setup.py 声明的各项信息包括:

- **name**:包的名称。

- **version**:包的版本。

- **description**:用一句话描述包的内容。

- **url**:包的托管源。

- **author**:包的作者。

- **author_email**:作者的联系邮箱。

- **license**:包的许可证。

- **packages**:包含模块的列表。

- **install_requires**:该项目依赖的包。

- **zip_safe**:是否可以作为 "zipfile" 安装和分发。

## 3. 创建 Python 包

现在,我们已经准备好创建 Python 包了!我们需要完成以下步骤:

1. 创建包的目录结构。

2. 填写包的元数据文件。

3. 编写我们的代码并将其组织在包的 Python 模块中。

让我们来完成这些步骤。

### 3.1 创建包目录结构

首先,我们需要创建包的目录结构。我们可以在任何位置创建包的目录结构,例如在桌面或 ~/Documents/ 中。下面,我们在我的文档目录下创建一个名为 my_package 的目录,在其中创建初始的 __init__.py 文件和 Python 模块文件:

```

mkdir ~/Documents/my_package

touch ~/Documents/my_package/__init__.py

touch ~/Documents/my_package/module_1.py

touch ~/Documents/my_package/module_2.py

```

### 3.2 填写元数据文件

接下来,我们需要填写元数据文件 setup.py。在此文件中,我们将列出有关包的所有详细信息。这里是一个快速的示例:

from setuptools import setup

setup(name='my_package',

version='0.1',

description='A sample Python package',

url='https://github.com/username/my_package',

author='Your Name',

author_email='your_email@example.com',

license='MIT',

packages=['my_package'],

install_requires=[

'numpy',

'pandas',

'matplotlib'

],

zip_safe=False)

在此示例中,我们使用 setuptools 库来构建包。除了列出名称、版本和依赖项之外,我们还指定包含模块的目录 'my_package',以及包的许可证。

### 3.3 编写包的 Python 模块代码

我们已经定义了包的目录结构和元数据,现在是时候编写我们的代码了。在我们的示例中,我们将编写两个模块,一个用于生成数据,一个用于显示数据。我们将分别编写这两个模块中的代码。

#### 3.3.1 数据模块

我们的数据模块将会生成一个简单的数据集,该数据集由三个变量组成:

import numpy as np

import pandas as pd

def generate_data(n_samples):

"""生成一个包含三个变量的简单数据集。

参数:

n_samples -- 数据集中的样本数。

返回:

一个 Pandas DataFrame,它包含三列变量。

"""

x = np.linspace(-1, 1, n_samples)

y = x ** 2

z = 'up' if np.random.random() < 0.5 else 'down'

data = pd.DataFrame({

'x': x,

'y': y,

'z': z

})

return data

在此模块中,我们从 numpy 导入 NumPy 库以生成简单的数据,并从 pandas 导入 pandas 库以将数据存储在 DataFrame 中。我们的 generate_data 函数将接收一个 n_samples 参数,该参数指定我们要生成的数据点数。我们将使用该参数来创建一条由 x 变量、y 变量和 z 变量组成的线。其中,z 为二分类变量,其类别为上涨(up)和下跌(down)之一。

该函数将生成一个 Pandas DataFrame 对象,由于返回的 DataFrame 包含变量 x、y 和 z,因此将该数据集命名为 'xyz'。

#### 3.3.2 显示模块

我们的第二个模块将包含代码,用于显示我们的数据集,并在任何要使用时提供方便的函数。该代码将使用 matplotlib 库来生成图表。下面是我们的显示模块代码:

import matplotlib.pyplot as plt

def plot_data(data, marker='o'):

"""绘制数据集的散点图。

参数:

data -- 要绘制的数据集。

marker -- 数据点的标记字符,默认为 "o"。

"""

plt.scatter(data['x'], data['y'], c=data['z'], marker=marker)

plt.xlabel('x')

plt.ylabel('y')

plt.title('My Data')

plt.show()

在此模块中,我们从 matplotlib 导入 pyplot 库。我们定义了一个名为 plot_data 的函数,该函数将接受我们的数据集和一个 marker 参数。该函数将使用 plt.scatter 函数绘制我们的数据集,并指定标记字符为所提供的 marker 参数。函数还将定义 x 轴和 y 轴的标签,设置标题,然后显示图表。

## 4. 使用您的 Python 包

现在,我们已经创建了我们的 Python 包,在我们的 my_package 目录下,我们可以创建三个文件 __init__.py、module_1.py 和 module_2.py,其中包含我们的 Python 代码。

为了安装我们的 Python 包,打开终端,在包的顶级目录下执行以下命令:

```

pip install .

```

这将会安装我们的 Python 包。

接下来,我们来测试一下刚刚创建的 Python 包。我们先打开 Python 交互式环境,导入模块,并用 generate_data 来生成我们的数据集,然后用 plot_data 将其绘制出来:

>>> from my_package import module_1, module_2

>>> data = module_1.generate_data(n_samples=50)

>>> module_2.plot_data(data)

下面是我们的 Python 包生成的图表示例:

![My Data Plot](https://s1.ax1x.com/2020/09/24/wdv0yT.png)

如您所见,我们创建的 Python 包提供了方便而强大的方式来组织、存储和共享我们的 Python 代码。通过将代码打包为 Python 包,我们可以轻松地在不同的项目和组织中重复使用我们的代码,并通过简单的 pip 安装来与其他人分享这些代码。

## 5. 总结

在这篇文章中,我们学习了如何创建一个 Python 包。我们了解了包的目录结构和元数据文件,并编写了两个 Python 模块,一个用于生成数据,另一个用于显示数据。

要使用我们的 Python 包,我们只需打包目录结构和元数据文件,然后使用 pip 安装即可。我们还演示了如何在 Python 中使用导入的模块来生成和显示我们的数据集。

后端开发标签