模块是什么

一个 .py 文件 = 一个模块。把相关函数 / 变量放一起,需要时 import。

# math_utils.py
def add(a, b):
    return a + b

def square(x):
    return x ** 2

PI = 3.14159
# main.py
import math_utils

print(math_utils.add(1, 2))
print(math_utils.PI)

import 的几种姿势

# 1. 整模块
import math_utils
math_utils.add(1, 2)

# 2. 只引部分
from math_utils import add, PI
add(1, 2)              # 不用前缀
print(PI)

# 3. 引并改名
import math_utils as mu
mu.add(1, 2)

from math_utils import add as plus
plus(1, 2)

# 4. 全部引(不推荐!污染命名空间)
from math_utils import *

标准库的常见 import

import os                    # 操作系统
import sys                   # 解释器接口
import json                  # JSON 处理
import datetime              # 日期时间
import random                # 随机
from pathlib import Path     # 路径处理
from collections import Counter, defaultdict

包:多模块组织

文件夹 + __init__.py 就是一个

mypkg/
├── __init__.py        # 标记这是一个包
├── utils.py
└── parser.py
from mypkg import utils
from mypkg.parser import parse

name == "main"

模块同时被 import 和直接运行时区分:

# my_tool.py
def main():
    print("跑工具")

if __name__ == "__main__":
    main()         # 直接 python my_tool.py 才执行
                   # 被 import 时不执行

这是 Python 的标准入口写法。

模块查找路径

import 时 Python 按这个顺序找:

  1. 当前脚本所在目录
  2. PYTHONPATH 环境变量列出的目录
  3. 标准库目录
  4. site-packages(pip 装的第三方)

查 / 改路径:

import sys
print(sys.path)         # 当前查找路径列表
sys.path.append("/my/path")    # 临时加

相对 import vs 绝对 import

# 绝对(推荐)
from mypkg.utils import helper

# 相对(仅在包内部)
from .utils import helper        # 同级
from ..other import something    # 上一级

下一篇讲标准库速览——Python 自带哪些好东西。