pydoc 默认终端输出,需用 pydoc -p 端口 启动 HTTP 服务器查看网页版离线文档;它仅索引当前环境已安装模块的 docstring,不下载文档,功能简陋但适合轻量快速查阅。

pydoc 能直接查本地模块文档,但默认不启动 HTTP 服务器
Python 自带的 pydoc 命令默认走终端输出,比如 pydoc requests.get 会直接打印帮助,不打开网页。想用浏览器看带链接、可跳转的离线文档,必须显式启用 HTTP 模式。
常见错误现象:pydoc -p 8000 执行后没反应,或浏览器打不开 http://localhost:8000 —— 实际是服务已启动,但终端没提示“Server ready”,容易误以为失败。
- 启动命令是
pydoc -p 8000(端口可换),不是pydoc serve或其他变体 - 首次运行可能卡顿几秒,尤其装了大量第三方包时,因需索引模块路径
- 若提示
socket.error: [Errno 48] Address already in use,说明端口被占,换端口即可,如pydoc -p 8001
离线文档依赖已安装的包,未 pip install 的模块不会出现在 pydoc 网页中
pydoc 不下载文档,只读取当前 Python 环境里已安装的模块源码或 __doc__ 字符串。它不等价于官方 docs.python.org 的完整 HTML 文档集。
使用场景:快速查自己写的模块、刚 pip install 的库、标准库函数,比如 pydoc pathlib.Path.glob;不适合查 CPython 内部实现细节或已被弃用但文档未删的旧接口。
立即学习“Python免费学习笔记(深入)”;
让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限
- 虚拟环境里启动
pydoc,只能看到该环境下pip list出来的包 - 标准库模块(如
json、itertools)始终可用,但文档质量取决于源码里写的 docstring 是否完整 - 某些包(如
numpy)自带更丰富的文档字符串,pydoc numpy.ndarray.shape能显示属性说明;而有些纯类型提示的包(如部分 Pydantic 模型)可能返回空或极简内容
浏览器里点链接跳转有时失效,本质是 pydoc 的模块发现逻辑限制
网页版 pydoc 左侧导航栏列出的模块,是按 sys.path 顺序扫描出来的。如果两个同名模块在不同路径(比如项目目录下有 requests.py,又装了 requests 包),pydoc 通常只显示第一个,且点击后可能 404。
常见错误现象:点开 myproject.utils 显示 “no Python documentation found”,但终端执行 pydoc myproject.utils 能正常输出 —— 这说明模块能 import,但 pydoc 的网页索引没把它归进可浏览列表。
- 确保模块所在目录在
sys.path里(比如当前目录运行pydoc,或提前设PYTHONPATH) - 避免模块名与标准库重名(如叫
json.py),否则pydoc json可能指向你的文件而非标准库 - 子模块(如
a.b.c)必须能被顶层 import(即a目录有__init__.py),否则网页不收录
性能差、样式简陋是设计使然,别指望替代 sphinx 或 mkdocs
pydoc 的网页模式就是个简易查看器,没有搜索框、没响应式布局、不支持代码高亮,CSS 是硬编码在源码里的极简风格。启动慢、加载卡,是因每次请求都动态生成 HTML,不做缓存。
兼容性影响:Python 3.7+ 行为基本一致,但 3.12 开始移除了 -w(write HTML 文件)选项,只剩 -p;Windows 上路径分隔符处理偶尔出错,建议用 python -m pydoc 替代直接调 pydoc 命令。
- 真要长期离线查文档,推荐用
python -m http.server配合官方离线 HTML 包(从 python.org 下载 “Documentation HTML”) -
pydoc适合临时、轻量、环境受限(比如没网络的测试机)下的快速查阅 - 最易被忽略的一点:关闭服务器得用 Ctrl+C,但有时终端卡住不响应,直接关窗口会导致端口残留,下次启动前记得
lsof -i :8000(macOS/Linux)或netstat -ano | findstr :8000(Windows)清理

















