Python函数-模块
2025-8-31
| 2025-8-31
Words 3509Read Time 9 min
type
status
date
slug
summary
tags
category
icon
password
😀
这里写文章的前言: 一个简单的开头,简述这篇文章讨论的问题、目标、人物、背景是什么?并简述你给出的答案。
可以说说你的故事:阻碍、努力、结果成果,意外与转折。
 

📝 模块和包

1、概念

模块(module) 就是一个 .py 文件;
包(package) 是含 __init__.py 的目录,可嵌套子包;
import 的本质是按 搜索路径 找到模块/包,把它变成 对象 放到当前命名空间。

2、文件结构示例

3、搜索顺序(sys.path)

  1. 当前脚本所在目录
  1. PYTHONPATH 环境变量
  1. 标准库目录
  1. site-packages(第三方包)

3.1、添加指定路径四种方法速查表

方法
典型语法
作用域
生命周期
适用场景
运行时修改 sys.path
import sys; sys.path.insert(0, '/abs/path')
仅当前进程
进程结束即失效
脚本/REPL 临时调试
设置环境变量 PYTHONPATH
export PYTHONPATH=/abs/path:$PYTHONPATH
当前 shell 及其子进程
会话级
开发机本地、CI 脚本
.pth 文件
在任意 site-packages 目录新建 my.pth,内容一行:/abs/path
全局解释器
永久生效
所有项目共享工具目录
包内相对导入 + pip install -e
pip install -e .(项目根含 setup.cfg/pyproject.toml
虚拟环境
直到卸载
正式项目/库开发

3.2、逐条说明与示例

  1. 运行时修改 sys.path(最灵活)
    1. 项目结构:
      优点:无需重启解释器,可动态计算路径。
      缺点:只对当前进程有效;写在脚本里别人看不到。
  1. 环境变量 PYTHONPATH(开发常用)
      • Linux/macOS:
        • Windows PowerShell:
          优点:一次设置,当前终端及其子进程均可 import toolkit
          缺点:换终端/IDE 需重新设置;发布给他人不方便。
      1. .pth 文件(“一次配置,永久生效”)
        1. 找到当前解释器的 site-packages 目录:
          1. 新建 my_extra.pth,内容只需一行:/absolute/path/to/your/dir
          2. 保存后任何新启动的该解释器都会自动把目录加入 sys.path
          3. 优点:跨项目、跨终端生效;无需改动代码。
            缺点:需要写文件权限;路径为绝对路径。
        1. 包内相对导入 + 开发安装(推荐用于正式项目)
            • 项目结构:
              • pyproject.toml 最少内容:
                • 安装到当前虚拟环境:
                  效果mypkg 被“链接”到 site-packages,任何路径下都能 import mypkg
                  优点:符合打包规范,可发布。
                  缺点:需要简单打包描述,但现代工具(Poetry、PDM、Hatch)已极大简化。

              4、导入包的方法

              语法
              效果
              import pkg
              将包 pkg 整体加载,并用同名变量 pkg 引用
              import pkg1, pkg2
              一次性加载多个包,分别用同名变量 pkg1pkg2 引用
              import pkg as alias
              将包 pkg 整体加载,并用自定义别名 alias 引用
              import pkg1 as alias1, pkg2 as alias2
              同时加载多个包,并分别用别名 alias1alias2 引用
              import superpkg.subpkg
              将子包 superpkg.subpkg 整体加载,并用同名变量 superpkg.subpkg 引用
              from superpkg import subpkg
              将子包 subpkg 直接导入当前命名空间,可直接使用 subpkg 调用

              5、导入模块的方法

              语法
              效果
              import pkg.mod
              把包 pkg 中的模块 mod 整体载入,使用时必须写全限定名 pkg.mod.xxx
              import pkg.mod as alias
              同上,但把模块绑定到自定义别名 alias,后续用 alias.xxx 调用,简化或避免命名冲突。
              from pkg import mod
              只把模块对象 mod 从包 pkg 中“提取”到当前命名空间,使用时直接写 mod.xxx,无需再写包前缀。
              from pkg.mod import func
              把模块 pkg.mod 中的具体对象(如函数、类、变量)func 直接放入当前命名空间,使用时直接写 func()func
              💡
              import.. :导入最小单位是模块,而不是变量、函数名、类名
              from .. import .. :导入最小单位可以是模块,也可以是变量、函数名、类名

              6、绝对 vs 相对导入

              类型
              写法
              说明
              绝对
              import mypkg.mod_a
              搜索路径根 开始找
              相对
              from . import mod_a
              . 当前包,.. 父包(只能在包内部用)

              7、常见坑 & 修复

              现象
              修复
              循环导入
              ImportError
              延迟导入(函数内 import)或重构
              相对导入脚本
              ModuleNotFoundError
              -m 运行包,或改为绝对导入
              同名文件挡住标准库
              标准库被覆盖
              改名或调整 sys.path
              包内直接运行
              __main__ 路径错
              使用 python -m mypkg.mod

              8、执行入口(主函数)

              8.1、基本语法

              8.2、__name__ 变量的作用

              当 Python 文件被直接运行时,__name__ 的值为 "__main__"
              当 Python 文件被导入为模块时,__name__ 的值为模块名(文件名)

              📝 第三方模块

              1、什么是“第三方模块”

              标准库:Python 官方随解释器一起发布的模块,如 osjsondatetime 等。
              第三方模块(third-party packages):由社区或个人开发、托管在 PyPI(Python Package Index)上的模块/包,需要用户额外安装才能使用,如 requestsnumpypandasflaskdjango 等。
              本质:放在 site-packages 目录下的目录或 .whl/.tar.gz 安装包,包含模块代码和元数据(METADATAsetup.pypyproject.toml 等)。

              2、常用安装方式

              2.1、pip(99 % 场景)

              概念:官方包管理器,自动下载 → 选 wheel → 回退源码 → 编译(如需要)。
              常用命令

              2.2、wheel(二进制包,后缀 .whl)

              概念:已编译好的“快递包裹”,复制即可用,跨平台需 tag 匹配。
              常用命令

              2.3、源码(sdist,.tar.gz / .zip)

              概念:最原始压缩包,任何平台都能编;缺 wheel 或需要改代码时用。
              常用命令

              2.4、Conda(科学计算全家桶)

              概念:带 C/Fortran/CUDA 依赖的大型二进制仓库,与 pip 互不干扰。
              常用命令

              2.5、系统包管理器(apt/yum/brew)

              概念:操作系统层面的 Python 包,版本通常滞后,但和系统库耦合。
              常用命令

              2.6、私有源 / Git / 本地路径

              3、注意事项

              使用虚拟环境(venv、conda env、poetry、pipenv)避免包冲突。
              国内用户建议配置镜像:
              1. 部分带 C 扩展的包(如 numpy, lxml)在 Windows 上推荐直接用 pip 下载预编译 wheel;若失败,可改用 conda。
              1. 如果同时装了 Python2/3,使用 python3 -m pippy -3 -m pip 明确版本。

              📝 内置模块

              built-in modules
              _thread
              abc
              aifc
              argparse
              array
              ast
              asynchat
              asyncio
              asyncore
              atexit
              audioop
              base64
              bdb
              binascii
              binhex
              bisect
              builtins
              bz2
              calendar
              cgi
              cgitb
              chunk
              cmath
              cmd
              code
              codecs
              codeop
              collections
              colorsys
              compileall
              concurrent
              configparser
              contextlib
              contextvars
              copy
              copyreg
              cProfile
              crypt
              csv
              ctypes
              curses
              dataclasses
              datetime
              dbm
              decimal
              difflib
              dis
              distutils
              doctest
              email
              encodings
              ensurepip
              enum
              errno
              faulthandler
              fcntl
              filecmp
              fileinput
              fnmatch
              fractions
              ftplib
              functools
              gc
              getopt
              getpass
              gettext
              glob
              grp
              gzip
              hashlib
              heapq
              hmac
              html
              http
              imaplib
              imghdr
              imp
              importlib
              inspect
              io
              ipaddress
              itertools
              json
              keyword
              lib2to3
              linecache
              locale
              logging
              lzma
              mailbox
              mailcap
              marshal
              math
              mimetypes
              mmap
              modulefinder
              msilib
              msvcrt
              multiprocessing
              netrc
              nis
              nntplib
              ntpath
              numbers
              operator
              optparse
              os
              ossaudiodev
              parser
              pathlib
              pdb
              pickle
              pickletools
              pipes
              pkgutil
              platform
              plistlib
              poplib
              posix
              posixpath
              pprint
              profile
              pstats
              pty
              pwd
              py_compile
              pyclbr
              pydoc
              queue
              quopri
              random
              re
              readline
              reprlib
              resource
              rlcompleter
              runpy
              sched
              secrets
              select
              selectors
              shelve
              shlex
              shutil
              signal
              site
              smtpd
              smtplib
              sndhdr
              socket
              socketserver
              spwd
              sqlite3
              ssl
              stat
              statistics
              string
              stringprep
              struct
              subprocess
              sunau
              symbol
              symtable
              sys
              sysconfig
              syslog
              tabnanny
              tarfile
              telnetlib
              tempfile
              termios
              textwrap
              this
              threading
              time
              timeit
              tkinter
              token
              tokenize
              trace
              traceback
              tracemalloc
              tty
              turtle
              turtledemo
              types
              typing
              unicodedata
              unittest
              urllib
              uu
              uuid
              venv
              warnings
              wave
              weakref
              webbrowser
              winreg
              winsound
              wsgiref
              xdrlib
              xml
              zipapp
              zipfile
              zipimport
              zlib
              💡
              1、个别模块只在特定平台或编译选项下存在(如 winregnisossaudiodev)。 2、带前缀 _ 的模块被视为实现细节,但仍可直接 import。

              1、语言基础 & 运行时

              1.1、sys

              作用:与 Python 解释器交互。

              1.2、builtins(隐式加载)

              作用:存放所有内建函数/异常;可覆盖或增强。

              1.3、gc

              作用:手动控制垃圾回收。

              2、数据类型增强

              2.1、collections

              作用:高性能容器数据类型。

              2.2、itertools

              作用:迭代器“工具箱”,惰性求值,节省内存。

              3、文本处理

              3.1、re

              作用:正则表达式。

              3.2、string / textwrap / unicodedata

              作用
              • string 提供常量和简单工具处理 ASCII 文本
              • textwrap 负责按宽度优雅地换行与缩进多行文本
              • unicodedata 让你查询和转换 Unicode 字符的规范化形式与属性。

              4、二进制 & 编码

              4.1、struct

              作用:在 bytes 与 C 结构体之间转换。

              4.2、base64 / binascii / codecs

              作用
              • base64 用可打印 ASCII 编解码二进制
              • binascii 在二进制与十六进制(及 Base64/32/16)间快速转换并校验校验和
              • codecs 注册并流式处理各种文本编码的编解码与增量转换。

              5、文件 & 目录 I/O

              5.1、os / os.path / pathlib

              作用:操作系统接口与路径。

              5.2、shutil

              作用:高级文件操作(复制、打包、删除树)。

              5.3、glob / fnmatch

              作用:文件通配符匹配。

              6、进程 & 并发

              6.1、subprocess

              作用:启动子进程并与其通信。

              6.2、threading / concurrent.futures

              作用:线程与线程池。

              6.3、multiprocessing

              作用:多进程并行,绕过 GIL。

              7、日期 & 时间

              7.1、datetime / time / calendar

              作用:日期时间运算、格式化、本地化。

              8、数学 & 统计

              8.1、math / cmath

              作用:浮点数学(math)与复数(cmath)。

              8.2、random / secrets

              作用:伪随机与安全随机。

              8.3、decimal / fractions / statistics

              作用:高精度十进制、分数、统计量。

              9、数据序列化 & 持久化

              9.1、json / csv / configparser

              作用:轻量结构化数据交换。

              9.2、pickle / shelve / sqlite3

              作用:二进制对象持久化、嵌入式数据库。

              10、网络 & 互联网

              10.1、urllib / http.client / smtplib / email

              作用:HTTP 请求、构造邮件等。

              10.2、socket / ssl

              作用:底层网络通信与安全套接字。

              11、调试 & 性能测试

              11.1、logging

              作用:标准日志系统,分级、可配置。

              11.2、pdb / cProfile / timeit

              作用:交互式调试、性能分析、小段代码计时。
            • 开发
            • Python
            • Python函数-循环变量闭包陷阱详解Python面向对象-面向对象基础
              Loading...