许多专业数据科学家使用Jupyter笔记本来完成他们的日常任务,从初步数据探索到模型原型制作。笔记本的互动性对于以数据为中心的编程特别方便,其自我文献的性质为分析结果的交流提供了极大的支持。
然而,Jupyter笔记本电脑经常因养成不良的编程习惯和几乎不支持软件工程最佳实践而受到批评。为了真正从笔记本中受益,用户应该意识到他们的常见陷阱并学习如何预防它们。
在先前的工作中(请参阅“与计算笔记本协作的最佳实践” [1]),我们介绍了17种经验验证的准则目录,以在专业背景下协作使用笔记本。
为了促进这些最佳实践的采用,我们创建了Pynblint,这是用Python编写的Jupyter笔记本的静态分析工具。 Pynblint揭示了潜在的笔记本缺陷,并建议采取纠正措施。它可以作为独立的CLI应用程序或CI/CD管道的一部分操作。
Pynblint的核心覆盖规则已被得出作为我们目录中最佳实践的操作。尽管如此,Pynblint的插件体系结构使用户可以轻松地使用自己的伸缩规则扩展核心检查集。
Python 3.7+。
Pynblint可以使用pip或其他PYPI软件包管理器安装:
pip install pynblint安装后,我们建议探索工具的命令行接口:
pynblint --helpPynblint可用于分析:
独立笔记本:
pynblint path/to/the/notebook.ipynb包含笔记本的代码存储库:
pynblint path/to/the/project/dir/ (可能也被压缩为.zip存档):
pynblint path/to/the/compressed/archive.zip一个包含笔记本的公共GitHub存储库(我们的路线图上支持对私人存储库的支持?):
pynblint --from-github https://github.com/collab-uniba/pynblint有关可用选项的更多信息,请参考项目文档。
Pynblint当前实施22条刺激规则:
这些规则源自我们为协作笔记本开发的最佳实践目录而得出的[1]。以下是与每种最佳实践相关的刺激规则的当前实施状态:
| [1]的最佳实践 | 地位 | 细节 |
|---|---|---|
| 1。使用版本控件 | ✅完成 | 完全实施 |
| 2。管理项目依赖性 | ✅完成 | 完全实施 |
| 3。使用独立环境 | ⏳正在进行中: | 计划:检测 - Python虚拟环境(例如,使用 venv , pyenv或conda创建)- 容器化环境(例如,Docker)。 |
| 4。开始进口 | ✅完成 | 完全实施 |
| 5。确保重新执行性(重新运行笔记本电脑自上而下) | ✅完成 | 完全实施 |
| 6。将您的代码模块化 | ?部分的 | 当前:笔记本中的模块化结构的检测。 计划:基于检测模式的模块化重点建议 |
| 7。测试您的代码 | ?部分的 | 当前:覆盖范围数据的存储库级检测。 计划:检测测试模块/功能,独立于覆盖工具 |
| 8。一贯命名笔记本 | ✅完成 | 完全实施 |
| 9。坚持编码标准 | ?部分的 | 电流:用无效的Python语法检测细胞。 计划:Python Linters的整合,例如Pylint,Flake8和Ruff |
| 10。使用相对路径 | ⏳正在进行中: | 计划:识别笔记本中的绝对路径实例和相应相对路径的建议 |
| 11.记录您的分析 | ✅完成 | 完全实施 |
| 12.杠杆降价标题构造笔记本 | ✅完成 | 完全实施 |
| 13。保持笔记本清洁 | ✅完成 | 完全实施 |
| 14.保持笔记本简明 | ✅完成 | 完全实施 |
| 15。区分生产和开发工件 | 没有计划 | 实施被认为是不可行的(请参见下面的注释) |
| 16.使您的笔记本可用 | ⏳正在进行中: | 计划:Pynblint将确保在其配置中发布的标记的笔记本可在线获得 |
| 17.使您的数据可用 | ✅完成 | 完全实施 |
注意:最佳实践#15(区分生产/开发工件)将无法实施,因为没有客观的标准可以通过对笔记本或存储库的静态分析来确定这种区别。
该项目是根据MIT许可证的条款获得许可的。
[1] Luigi Quaranta,Fabio Calefato和Filippo Lanubile。 2022。引起与计算笔记本协作的最佳实践。 Proc。 ACM Hum.-Comput。相互影响。 6 ,CSCW1,第87条(2022年4月),41页。 https://doi.org/10.1145/3512934