我有一个项目,包含一堆Python模块(.py
文件(和一堆Jupyter Notebook(.ipynb
文件(,它们从Python模块导入内容。
我可以(假设我在所有子文件夹中都有__init__.py
文件(通过简单地从项目根运行mypy .
来键入检查所有.py
文件。但我也希望能够打字检查我的Jupyter笔记本。
一个理想的解决方案是:
- 类型检查我的Jupyter笔记本中的所有Python代码
- 能够在类型检查时从Jupyter Notebooks中导入
.py
模块,就像在.py
文件中导入一样 - 让我从命令行对整个项目进行类型检查,这样我就可以作为测试套件或预提交挂钩的一部分运行类型检查,并且
- 以某种方式有意义地报告Notebooks中类型错误的位置,类似于mypy在
.py
文件中打印错误的行号
我该怎么做?
您可以使用nbQA并执行
pip install -U nbqa
nbqa mypy your_notebook.ipynb
结账nb mypy
Nb Mypy
是一种在Jupyter笔记本单元格执行时自动在其上运行mypy的功能,同时保留有关执行历史的信息。
更多详情点击此处
您可以:将所有笔记本转换为python,然后在上面运行mypy(如何通过命令行将IPython笔记本转换为python文件?(。
jupyter nbconvert --to script [YOUR_NOTEBOOK].ipynb
只要写一个小脚本就可以了:(
我使用Jupytext和我的IDE来实现这一点。
我以py:%%格式导出一份副本,并将其链接到笔记本。我在jupyter实验室环境中进行开发,但.py
文件是git存储库中的文件。在提交之前,我通过常见的linter运行它,black
、pydocstyle
、mypy
(使用严格的配置(。然后,我在Jupyter实验室重新加载笔记本,重新启动内核并"全部运行"以确保结果仍然正常,然后将文件提交到存储库