Coursera 笔记

Module 01 · Python Coding Practices and Packaging Concepts

Packaging打包

Coursera ↗

观看此视频后,您将能够:

  • 区分 Python 模块、包和库。
  • 创建 Python 包。
  • 验证 Python 包。
  • 使用 Python 包。

1. 模块、包和库的区别

模块 (Module)、包 (Package) 和库 (Library) 是 Python 中经常使用的术语。

Python 模块 (Module)

  • 定义: 一个 Python 模块是包含 Python 定义、语句、函数和类的 .py** 文件**。
  • 作用: 可以将模块导入到其他脚本或 Notebook 中使用。
  • 示例: module.py 文件中包含 square(number) 和 doubler(number) 两个函数。

    Python
    # module.py 示例
    def square(number):
        return number ** 2 # 计算平方
    
    def doubler(number):
        return number * 2 # 计算双倍值
    
    
  • 使用: 如果模块在同一目录下,可以直接导入并使用其中的函数。
    • 示例: 导入后,print(square(4)) 的输出为 16;print(doubler(4)) 的输出为 8。

Python 包 (Package)

  • 定义: 包是将 Python 模块集合到一个目录中,该目录中必须包含一个 __init__.py** 文件**。这个文件将它与普通的脚本目录区分开来。
  • 示例: my_project 是一个包,它包含 module1.py、module2.py 模块以及一个 __init__.py 文件。
  • 导入类型: 当您导入模块或包时,Python 创建的相应对象总是 module 类型。
  • 区分: 模块和包的区别仅存在于文件系统级别。

Python 库 (Library)

  • 定义: 一个库是一个包的集合,或者它也可以是单个包。
  • 示例: NumPy、PyTorch 和 Pandas 等。
  • 注意: 在实践中,包 (Package) 和库 (Library) 这两个术语经常互换使用。因此,NumPy、PyTorch 和 Pandas 也常被称为包。

2. 创建 Python 包的步骤

假设有两个模块:module1.py(包含 square 和 doubler 函数)和 module2.py(包含 mean 函数)。要将 my_project 文件夹变成一个包,必须遵循以下步骤:

  1. 创建文件夹: 创建一个以包命名的文件夹(例如 my_project)。
  2. 创建 __init__.py 文件: 在该文件夹内创建一个空的 __init__.py 文件。
  3. 创建所需模块: 在该文件夹内创建所需的模块文件(例如 module1.py 和 module2.py)。
  4. 编辑 __init__.py 文件: 在 __init__.py 文件中,添加代码以引用包中需要的模块。
    Python
# my_project/__init__.py 的内容
from . import module1 
from . import module2


3. 验证 Python 包

创建包后,您需要验证它是否成功加载:

  1. 打开 Bash 终端: 确保终端目录与您的包文件夹位于同一父目录下。
  2. 打开 Python 解释器: 在 shell 中运行命令 python。
  3. 导入包: 在 Python 提示符下,键入 import 后面跟包的名称。
  • 示例: import my_project
  1. 验证: 如果命令运行没有错误,则表明包已成功加载。

测试结构: 验证包中函数的一般结构是:package_name.module_name.function_name(parameters)。

  • 示例: 使用包中的函数:
    Python
    >>> my_project.module1.square(2)
    4
    
    


4. 使用 Python 包

如果包文件夹位于同一父目录中,您可以在其他脚本中使用它。

  • 示例: 在父目录下的 test.py 文件中,您可以导入并使用包中的函数:

Python

# test.py 内容

# 从 my_project 包的 module1 导入 square 和 doubler
from my_project.module1 import square, doubler

# 从 my_project 包的 module2 导入 mean
from my_project.module2 import mean 

# 使用并打印函数结果
print(f"Square of 4: {square(4)}")       # 输出 16
print(f"Doubler of 4: {doubler(4)}")     # 输出 8
print(f"Mean of (2, 1, 3): {mean(2, 1, 3)}") # 假设 mean(a, b, c) 返回 (a+b+c)/3

您可以运行 test.py 文件,并检查是否得到了正确的结果。