Skip to content

09 模块与包管理

📋 资料说明

  • 来源:课程 day09
  • 笔记尚硅谷大模型技术之Python1.0.docx 第 10 章
  • 每日一考day09_每日一考.mdday10_每日一考.md(含打包实战题)
  • 视频:❌ 跳过(共 17 个视频:模块导入 → 包 → 第三方库 → 打包安装)

🟢 🤖 AI 替代率:95%

为什么是这个水平:

模块导入的语法(import / from...import / import...as)是固定规则,AI 完美掌握。包管理(pip installvenv)的操作步骤也是确定性的。

唯一的 5% 人类价值在于:当遇到模块搜索路径冲突、循环导入、虚拟环境问题等实际环境问题时,需要人对 Python 的导入机制有更深的理解。


👤 人工干预率:5%

了解 __name__ == "__main__" 的作用和 __all__ 的用途即可。遇到循环导入时,能意识到是设计问题而不是语法错误。


1. 模块导入

导入整个模块

python
import math
print(math.sqrt(16))  # 4.0
print(math.pi)        # 3.14159

导入部分成员

python
from math import sqrt, pi
print(sqrt(16))  # 4.0

导入所有成员(不推荐)

python
from math import *  # 可能污染命名空间

使用别名

python
import numpy as np
from math import sqrt as square_root

2. 模块搜索顺序

python
import sys
print(sys.path)
# 1. 当前脚本所在目录
# 2. PYTHONPATH 环境变量
# 3. Python 安装目录下的 site-packages

all 的作用

python
# 在 mymodule.py 中:
__all__ = ["func1", "func2"]  # 控制 from mymodule import * 导入的内容

def func1():
    pass

def func2():
    pass

def _private_func():  # 以下划线开头表示私有
    pass

3. name 属性

python
# 每个 Python 文件都有 __name__ 属性
# 直接运行时:__name__ = "__main__"
# 被导入时:__name__ = 模块名

def main():
    print("程序入口")

if __name__ == "__main__":
    main()  # 只有直接运行时才执行

4. 包(Package)

python
# 目录结构:
# mypackage/
#   __init__.py    # 包初始化文件(可以为空)
#   module1.py
#   module2.py
#   subpackage/
#       __init__.py
#       module3.py

# 导入
import mypackage.module1
from mypackage import module2
from mypackage.subpackage import module3

5. 第三方库管理

bash
# pip 基本命令
pip install requests          # 安装
pip install numpy==1.26.0    # 安装指定版本
pip uninstall requests        # 卸载
pip list                      # 列出已安装的库
pip freeze > requirements.txt # 导出依赖

# 使用 requirements.txt
pip install -r requirements.txt

虚拟环境

bash
# 创建虚拟环境
python -m venv myenv

# 激活(Windows)
myenv\Scripts\activate

# 激活(macOS/Linux)
source myenv/bin/activate

# 退出
deactivate

6. 打包与安装

python
# 目录结构:
# mypackage/
#   __init__.py
#   mymodule.py
# setup.py

# setup.py
from setuptools import setup, find_packages

setup(
    name="mypackage",
    version="1.0.0",
    packages=find_packages(),
    install_requires=[
        "requests>=2.25.0",
    ],
)

# 打包
# python setup.py sdist bdist_wheel

# 安装自己打的包
# pip install dist/mypackage-1.0.0.tar.gz

练习题

练习 1:创建模块

创建一个 calculator.py 模块,包含 addsubmuldiv 四个函数。在另一个文件中导入并使用。

练习 2:创建包

创建包结构 vehicle/car.pyCar 类有 startstop 方法。打包并安装使用。


参考答案

练习 1:

python
# calculator.py
def add(a, b): return a + b
def sub(a, b): return a - b
def mul(a, b): return a * b
def div(a, b): return a / b

# main.py
from calculator import add, mul
print(add(10, 20))  # 30
print(mul(3, 5))    # 15

练习 2:

python
# vehicle/car.py
class Car:
    def start(self):
        print("start")
    def stop(self):
        print("stop")

# setup.py(和 vehicle 目录同级)
from setuptools import setup
setup(name="vehicle", version="1.0", packages=["vehicle"])

# 安装使用
# pip install .
# from vehicle.car import Car
# car = Car()
# car.start()

OPC 超级个体实战指南