模块和包

Python
作者

yangjh

发布于

2022年11月22日

在Python中,模块和包是组织代码的一种方式,可以帮助你的代码保持结构清晰和易于维护。让我们用一个简单的例子来解释它们。

模块(Module)

想象一下,你正在建造一个乐高城堡。每个小乐高积木块可以被看作是一个模块。每个积木块都有特定的形状和功能,你可以用它来构建城堡的一部分。在Python中,一个模块就是一个包含Python代码的文件(以.py结尾)。这个文件可能包含函数、类、变量等。

假设你有一个名为 math_tools.py 的文件,其中包含了一些数学相关的函数。

# math_tools.py

def add(a, b):
    return a + b

def subtract(a, b):
    return a - b

这个 math_tools.py 文件就是一个模块。你可以在其他Python文件中导入并使用它。

# another_file.py

import math_tools

result = math_tools.add(3, 4)
print(result)  # 输出: 7

包(Package)

继续乐高的比喻,如果你有很多乐高积木块,你可能会把它们按类型或用途分组放在不同的盒子里。在Python中,一个包是一个包含模块的目录。这个目录会有一个特殊的文件 __init__.py(可以是空的),用来告诉Python这个目录应该被视为一个包。 : 假设你现在有一个名为 math_package 的目录,里面有多个模块(文件),比如 addition.pysubtraction.py,还有一个 __init__.py 文件。

math_package/
│
├── __init__.py
├── addition.py
└── subtraction.py

addition.py 中,你可能有一个加法函数,而在 subtraction.py 中有一个减法函数。你可以按照以下方式导入和使用这些模块:

# another_file.py

from math_package import addition, subtraction

result = addition.add(10, 5)
print(result)  # 输出: 15

在这个例子中,math_package 就是一个包,它帮助你组织相关的模块(如 additionsubtraction),使得代码结构更清晰、更易于管理。

  • 模块 是单个文件,包含Python代码,可以是函数、类或变量。
  • 是一个目录,用于组织模块,使得代码结构更好,更易于维护。

第三方包管理工具pip

pip 是一款 Python 自带的第三方包管理工具。它本身也是一个包,当用户安装 Python 时该包会自动安装。通过 pip 工具,可以方便地从Python Package Index及类似的网站安装、更新、删除各种包。

常用操作

以下是一个表格,总结了 pip(Python包管理工具)的一些基本用法:

命令 描述
pip install package_name 安装名为 package_name 的包
pip uninstall package_name 卸载名为 package_name 的包
pip list 列出已安装的包
pip show package_name 显示名为 package_name 的包的详细信息
pip search keyword 搜索与关键词相关的包(注:某些pip版本可能不支持此功能)
pip install package_name --upgrade 升级名为 package_name 的包
pip install -r requirements.txt 根据 requirements.txt 文件安装多个依赖包
pip freeze 生成当前环境中已安装包的列表(常用于创建 requirements.txt 文件)
pip freeze > requirements.txt 将已安装包的列表输出到 requirements.txt 文件中
pip install package_name==version_number 安装特定版本的包

pip源的选择

有些情况下,比如网络不给力,连接超时、防火墙阻挡等等各种原因,我们可能无法从Python官方的PyPi仓库进行pip安装,这时候可以选择国内的第三方源。使用方法:

pip install -i https://pypi.doubanio.com/simple/ --trusted-host pypi.doubanio.com pillow

需要注意的是,除了最后的pillow用你所期望的库名替代外,前面的参数都是固定写法,包括参数顺序。

如果不想每次用 pip 都加上-i https://pypi.tuna.tsinghua.edu.cn/simple,那么可以把国内源设为默认,做法是:

# 清华源
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
# 阿里源
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/