《Python编程实战》1.1 从零搭建:uv + ruff + 静态检查
真实项目的第一步不是写代码,而是把脚手架搭对。本节用 uv 从零建出一个 src 布局的 Python 项目,实测 uv init、uv run、uv add、uv lock 的完整输出,再把 ruff 与 mypy 装成 dev 依赖跑通第一次静态检查,让你五分钟拿到一个可提交、可协作、可复现的工程骨架。
category
真实项目的第一步不是写代码,而是把脚手架搭对。本节用 uv 从零建出一个 src 布局的 Python 项目,实测 uv init、uv run、uv add、uv lock 的完整输出,再把 ruff 与 mypy 装成 dev 依赖跑通第一次静态检查,让你五分钟拿到一个可提交、可协作、可复现的工程骨架。
本附录分两半:报错速查按异常类型列出真实报错原文、成因与修法,覆盖 SyntaxError 到 AssertionError 共十七类;常见困惑 FAQ 解答 a=b 的别名、可变默认参数、多线程没变快、is 与 ==、pip 装错环境、中文乱码、.pyc 缓存、finally 里 return 等问题。
本附录按场景汇总 Python 生态里的常用第三方库:包管理与环境、代码质量、测试、Web 与 API、数据库与 ORM、数据处理、网络与爬虫、命令行、序列化配置、任务队列、可观测性、科学计算、桌面图像、打包发布,每张表给出库、用途、对应章节与实测版本号,并整理学习资源。
本附录按用途分组整理 Python 标准库常用模块:文本与字符串、数据结构、函数式与迭代、文件与路径、日期时间、数据格式、并发与异步、网络、调试与剖析、系统与进程、测试、数值随机与哈希、压缩归档与持久化,每组给出模块、一句话用途、常用名字与对应正文小节,并标注引入版本与版本分界速查。
本附录把全书用到的 Python 语法压缩成一组速查表:字面量与运算符优先级、字符串/列表/字典/集合的常用方法与复杂度、切片与解包、函数参数四种形态、作用域、类与继承、异常语法、match 语句、PEP 695 类型注解、内置函数与 f-string 格式说明符,每个片段均在 3.14.6 上实测。
《Python编程入门》全书导航页:说明本书定位、读者画像与前置知识、三条学习路径与四个部分之间的依赖关系,并按四个部分列出 18 章 54 节的完整章节索引,另含序、前言、附录 A–D 与常见问题速查表,方便按需定位、跳读与随时查阅全书。
《Python编程入门》的序。从 Python 今天在语言生态中的位置谈起,说明站内既有的 46 篇 Python 专题做的是「单点深挖」、这本书补的是「从零到能干活」的递进路径,并交代本书的三个刻意取舍、明确不写的内容,以及不同起点的读者该从哪一章进入这趟旅程。
《Python编程入门》前言:说明本书的目标读者与前置知识、四部分 18 章的结构分工、每一节的组织方式、代码与环境约定、Python 3.14 的版本基线与三种阅读路径,并给出各部分的学习时长估算,以及发现疏漏时该如何提交勘误与反馈意见。
本书收尾章:给出 Web 后端、数据工程、自动化与工具三条学习路线的下一步顺序,教你用可操作的评估表做生态选型而非背推荐清单,坚持标准库优先,并实跑 help/inspect/pydoc/dis 教你读文档与源码,附 90 天行动清单与三部曲定位。
先测量再优化:用 perf_counter 与 timeit 做微基准并识别四大陷阱,用 cProfile/pstats 定位热点、tracemalloc 剖析内存,实测 list 与 set 查找、sum/any、__slots__、lru_cache、array 的真实收益,并讲清 sys.getsizeof 的局限与何时不该优化。
把全书串起来做一个真项目:用 src 布局、pyproject.toml 与模块划分,从零构建命令行日志分析器 loglens,覆盖 dataclass 数据模型、正则解析、Counter 统计、argparse 入口与 pytest 测试,并真实跑通 pytest、ruff、mypy 与端到端 CLI。
把 pandas 与 polars 放在一起讲:用同一份 50 万行销售数据各跑一遍 groupby 聚合,对比代码量与实测耗时,再实测 dtype 与内存占用、链式调用与惰性 API、apply 与向量化的性能差,并说清缺失值、NaN 与链式赋值的坑。
从合规边界讲起:用 urllib.robotparser 解析 robots.txt、遵守服务条款与请求频率,再在本地 http.server 上真抓真解析,掌握 httpx 状态码与编码处理、BeautifulSoup 的 find 与 select、分页限速与指数退避,以及动态渲染与存储去重。
用 pathlib 与 shutil 把散落的文件批量重命名、按扩展名归类、安全删除,掌握 zipfile/tarfile 的解压炸弹与路径穿越防护,再用 openpyxl 读写带公式与样式的 Excel,最后用 subprocess 与轮询式监听接进日常工作流。
把 Pydantic 校验、FastAPI 依赖注入与 SQLAlchemy 2.x 数据库访问拼成一个真实后端:Field 约束与自定义校验器、带 yield 的依赖做资源清理、select() 2.0 风格 CRUD 真跑 SQLite,并讲清 ORM 模型与 Pydantic 模型为何分离。
用 FastAPI 写下第一个真实可跑的 API:路径参数、查询参数、Pydantic 请求体、response_model、HTTPException、BackgroundTasks、APIRouter 与 Depends,看它自动生成的 OpenAPI 文档,并用 TestClient 写测试;最后实测 def 与 async def 端点的线程差异。
从一次真实的 HTTP 交互出发,看懂请求行、状态码、响应头与消息体;再分别手写最小 WSGI 应用(wsgiref)与最小 ASGI 应用(uvicorn)并真跑起来,对照 environ 与 scope 结构,理解同步阻塞模型与事件循环模型的根本差异。
锁定依赖是可复现构建的地基。本节先拆 pip freeze 为何不可复现,再对比 uv/poetry/pdm/pip-tools 的锁文件分工,用 packaging 与 pip 实测 diamond dependency 冲突,演示 require-hashes 哈希校验与离线安装,最后落到容器镜像中的可复现要点。
构建产物 sdist 与 wheel 到底差在哪?本节逐段解码 wheel 文件名,真实跑一次 python -m build,把 wheel 装进临时 venv 执行 console_scripts 命令,再讲清包数据、入口点插件、twine check、TestPyPI 与 PyPI 的上传流程,以及版本号不可复用这条硬规则。
从 setup.py 与 requirements.txt 的历史包袱讲起,用 PEP 518/517/621 三条线串起 pyproject.toml 的来历;拆解 build-system 后端选型与 project 表标准字段,重点实测依赖说明符中 ~= 的锁定边界与逗号、空格的区别,并给出经 tomllib 校验的完整配置。