第一时间捕获有价值的信号
本书总结《Python高手之路》核心要点,聚焦大型 Python 工程代码的软件工程实践。内容涵盖API管理、时区处理、文档编写、包分发与测试等,助你掌握 Python 进阶开发规范与最佳实践。
核心内容
这本书重点讲如何用 Python 编写一个大型工程代码的,如何运用软件工程的思维,特别值得需要进阶的初学者阅读,涉及的一些规范到很少在其他书里提到,在这里简单总结下。
外部库的使用建议
- 避免库和实际源代码之间过于耦合,尽量自己写 API,用一个包装器对外部库进行封装,将其与自己的源代码隔离
管理 API 的变化
- 在修改 API 时要通过文档对修改进行详细记录,最少包括以下三点:
- 记录新的接口;
- 记录废除的旧接口;
- 记录如何升级到新接口;
时区陷阱问题
- 区分三种时间关系:UTC,服务器所在时区,用户所在时区
- datetime API 总是返回非时区感知的 datetime 对象,所以必要时都应该改转换为时区感知的datetime 对象(包含时区信息的)以便比较之后正确的返回给用户。
>>> import datetime
>>> import pytz
>>> datetime.datetime.now()
datetime.datetime(2019, 11, 13, 8, 25, 26, 407681)
>>> datetime.datetime.now(tz=pytz.utc)
datetime.datetime(2019, 11, 13, 0, 25, 51, 933941, tzinfo=<UTC>)
>>> datetime.datetime.now().isoformat()
'2019-11-13T08:28:48.810858'
文档编写
- 采用 Sphinx+reST+Read The Docs方式
- Sphinx 是一种文档工具,新版的Python文档就是由 Sphinx 生成的,并且它已成为Python项目首选的文档工具。
- Sphinx 使用 reStructuredText 作为标记语言,被设计为容易阅读和编写的纯文本。
- 快速上手
pip install sphinx
mkdir sphinx-demo
# src下是源码/ doc下构建文件
sphinx-demo
├─doc
└─src
cd doc
sphinx-quickstart
软件分发
- 分发工具 setuptools 是目前分发库的主要选择,distlib 改进开发中,是基于 PEP 描述内容实现的。
- 分发格式,PEP 427 定义了新的分发标准,名为 Wheel。
- 包的安装,pip 作为包管理的一站式解决方案。
- 这篇有详细介绍
虚拟环境
- 虚拟环境对自动运行单元测试套件非常有用,而且是一种非常通用的模式,tox 工具用来专门解决这一问题
virtualenv myenv
source myenv/bin/activate
pip install -r requirements.txt
deactivate
单元测试
- 在单元测试中,fixture 表示 “测试前创建,测试后销毁”的(辅助性)组件,unittest 的 setUp,tearDown函数起到类似的作用,在运行某个测试前后执行一组通用的操作。并且可以通过 fixtures 模块,hook上面两个函数,自定义通用测试模块。