【问题标题】:Type-check Jupyter Notebooks with mypy使用 mypy 对 Jupyter Notebooks 进行类型检查
【发布时间】:2020-03-17 11:45:01
【问题描述】:

我有一个项目,其中包含一堆 Python 模块(.py 文件)和一堆 Jupyter Notebooks(.ipynb 文件),它们从 Python 模块中导入内容。

我可以(假设我在所有子文件夹中都有__init__.py 文件)只需从项目的根目录运行mypy . 就可以对所有.py 文件进行类型检查。但我还希望能够对我的 Jupyter Notebooks 进行类型检查。

理想的解决方案是:

  • 在我的 Jupyter Notebooks 中输入检查所有 Python 代码,
  • 能够在类型检查时从 Jupyter Notebooks 中跟踪 .py 模块的导入,就像在 .py 文件中导入一样,
  • 让我从命令行对整个项目进行类型检查,以便我可以将类型检查作为测试套件或预提交挂钩的一部分运行,并且
  • 以某种方式有意义地报告类型错误在我的笔记本中的位置,类似于 mypy 如何为 .py 文件中的错误打印行号。

我该怎么做?

【问题讨论】:

  • 您找到解决方案了吗?
  • @Chris_Rands E. Serra 下面的答案可能是任何解决方案都将基于的种子,但从中构建一个真正令人满意的脚本是很棘手的。我开始但不满意;如果没有人超过我,我可能有一天会自己回答。

标签: python jupyter-notebook mypy


【解决方案1】:

你可以使用nbQA 并做

pip install -U nbqa
nbqa mypy your_notebook.ipynb

免责声明:我是 nbQA 的作者

【讨论】:

  • 这个答案很棒,因为它为在笔记本上运行 linter/formatters/etc 的问题提供了一个通用的解决方案。感谢您写它@ignoring_gravity!
  • 感谢@erb,非常感谢! 0.7.0 版本刚刚发布,它对 mypy 进行了一些修复
【解决方案2】:

您可以: 将所有笔记本转换为 python,然后在其上运行 mypy (How do I convert a IPython Notebook into a Python file via commandline?)。

jupyter nbconvert --to script [YOUR_NOTEBOOK].ipynb

只需编写一个小脚本来执行此操作即可:)

【讨论】:

    【解决方案3】:

    我为此使用 Jupytext 和我的 IDE。

    我以 py:percent 格式导出副本,将其链接到笔记本。我在 jupyter 实验室环境中进行开发,但 .py 文件是 git 存储库中的文件。在提交之前,我通过通常的 linter 运行它,blackpydocstylemypy(具有严格的配置)。然后我在 Jupyter 实验室中重新加载笔记本,重新启动内核并“全部运行”以确保结果仍然正常,然后才将文件提交到存储库

    【讨论】:

      猜你喜欢
      • 2016-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-15
      • 1970-01-01
      • 2012-10-16
      • 2020-07-13
      相关资源
      最近更新 更多