PyAnnotate:自动生成PEP-484注释
项目描述
PyAnnotate:自动生成PEP-484注释
根据运行时观察到的调用参数和返回类型将注释插入到源代码中。
有关许可和版权信息,请参阅本文件末尾。
博客文章:http://mypy-lang.blogspot.com/2017/11/dropbox-releases-pyannotate-auto.html
如何使用
请参阅示例目录。
阶段 1:收集运行时类型
- 按照常规方式安装(见下文“繁琐流程”部分)
- 将
from pyannotate_runtime import collect_types
添加到您的测试中 - 在测试设置初期,请调用
collect_types.init_types_collection()
- 在调用
collect_types.start()
和collect_types.stop()
之间包围你的测试执行(或者使用下面的上下文管理器) - 完成后,调用
collect_types.dump_stats(filename)
start()
和 stop()
之间的所有调用将被分析,观察到的类型将被写入(以 JSON 格式)到传递给 dump_stats()
的文件名。每个导出调用可以包含多个 start/stop 对。
如果您想在运行 pytest
时自动收集类型,请参阅 example/example_conftest.py
和 example/README.md
。
除了使用 start()
和 stop()
之外,您还可以使用上下文管理器
collect_types.init_types_collection()
with collect_types.collect():
<your code here>
collect_types.dump_stats(<filename>)
第二阶段:将类型插入到您的源代码中
命令行工具 pyannotate
可以根据第一阶段收集的注释将注释添加到您的源代码中。关键参数包括
- 使用
--type-info FILE
告诉它传递给dump_stats()
的文件 - 位置参数是要注释的源文件
- 如果没有其他标志,工具将打印一个 diff,表明它建议执行的操作,但不会实际执行。请审查输出。
- 添加
-w
使工具实际更新您的文件。(请使用 git 或其他方式备份。)
此时,您可能需要运行 mypy 并迭代。您可能需要调整更改以使 mypy 完全满意。
注意事项和技巧
- 最好一次处理一个文件,至少直到您对工具感到舒适。
- 工具不会触及已经具有注释的函数。
- 工具可以生成以下任一项
- 类型注释,即 Python 2 风格的注释
- 内联类型注释,即 Python 3 风格的注释,使用 v1.0.7+ 中的
--py3
繁文缛节
安装
这应该适用于 Python 2.7,以及 Python 3.4 及更高版本。
pip install pyannotate
这安装了几个项目
-
一个运行时模块,pyannotate_runtime/collect_types.py,它使用配置钩子收集和导出在运行时观察到的类型。
-
一个库包,pyannotate_tools,包含可以读取运行时模块导出的数据并将注释插入源代码的代码。
-
一个入口点,pyannotate,它在您的文件上运行库包。
有关依赖项,请参阅 setup.py 和 requirements.txt。
测试等。
要运行单元测试,请使用 pytest
pytest
待办事项
我们很乐意您帮助解决这些问题
- 更好的文档。
- Python 3 代码生成。
- 重构工具模块(目前遗留架构显而易见)。
致谢
以下人员对这款工具做出了重大贡献
- 托尼·格鲁
- 谢尔盖·沃罗比耶夫
- 尤卡·莱赫托萨拉
- 吉多·范罗苏姆
许可证等。
- 许可证:Apache 2.0。
- 版权归属:版权所有(c)2017 Dropbox,Inc。
- 项目的外部贡献应受 Dropbox 的贡献者许可协议(CLA)的约束:https://opensource.dropbox.com/cla/
项目详情
下载文件
下载您平台上的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源代码发行版
构建分布
pyannotate-1.2.0.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 04ed5804bab38153d5981fc92d83dcf6a22883453768561f057e777e5c057599 |
|
MD5 | 6d1fcafc9b773560ed72aa3873910b48 |
|
BLAKE2b-256 | 0d262f68c02fae0b88d9cefdbc632edad190d61621b5660c72c920be1e52631e |
pyannotate-1.2.0-py2.py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | bc2b5b4ea57aa90f99da9d71b547262eed19ea4b6ba355bf57439eeab9b90e93 |
|
MD5 | e5e96642eb0e3c221dd057fdb479d010 |
|
BLAKE2b-256 | 0af02d6c59cc0662d922421df7a15e428e268fd750b9b257ddd12f167fe2402e |