下一个可能就是你!点击此处提交创客博客系列摘要。
恭喜!你已经编写了一些有用的 Python 代码。接下来呢?你明天、一年后或十年后还能运行这段代码吗?如果你把它交给别人,他们能运行吗?你能设置它在没有你在场的情况下定期运行,或者在不需要仅存储在你脑海中的特殊信息的情况下将其部署到服务器上吗?
如果你不计划可重复性,那么所有这些问题的答案几乎肯定是“否”。Python 程序通常建立在来自各种独立安装的库的代码之上,即使其中一个库不可用,或者版本比你使用的版本旧或新,你的代码也很容易停止工作。幸运的是,Python 具有捕获所有这些依赖项的工具,因此你可以实现几乎任何你想要的可重复性级别,尽管每个新级别都需要更多的工作,并且需要更多的磁盘空间或其他资源。
作为有用的指南,以下是可重复性不断提高的级别列表;只需选择你需要的级别并按照说明进行操作即可实现!我们将假设你想重现的代码表示为 Jupyter notebook 代码单元中的 Python 行,或表示为 .py Python 文本文件。我们还将假设如果你的代码需要数据,则数据是静态的并且足够小,可以与你的代码一起存档(但我们稍后会回到这个假设!)。
除非你明确使你的项目可供其他人重现,否则你很可能停留在级别 -1 或级别 0。达到级别 1 需要用于管理与底层系统分离的 Python 环境的工具,例如 pip+venv、poetry 或 conda,这些工具通常可用,但对于可重复性而言并非真正足够,因为它们不捕获所需的命令或数据文件。在实践中,我的目标是制作级别 3 存档,这是第一个让我有信心分享我的代码并期望它在几个月后对我或其他人有效的级别,同时生成一个紧凑的文件存档,其中仅包含严格要求重现项目的内容。达到级别 3 确实需要安装 anaconda-project,但这很容易通过开源下载实现,并且生成的项目存档并不比任何其他可以包含你的项目的存档大得多。(也有计划最终将 anaconda-project 合并到 conda 本身中,从而进一步降低可重复性的门槛。)Anaconda Nucleus 包含一个 简单指南,介绍如何使用 anaconda-project 开始使用级别 3 及更高级别。
级别 4 通常也很有用,但它需要文件大小大幅增加,因为你的存档保存了特定平台上每个依赖项的副本,因此你不会想每天都创建级别 4 存档。不过,在里程碑或项目结束时绝对有用!级别 5 再次增加了所需的文件大小,并且还需要安装 Docker 来测试结果,但它提供了很好的保证,即你的项目将保持可用性,并且对于部署特别有用,考虑到部署系统中对 Docker 的广泛支持。级别 6 和 7 适用于真正偏执的人,或者适用于你真的非常担心以后无法运行该代码的情况(例如,出于监管、法律或产品安全原因)。
请注意,以上级别都假设如果你的代码需要任何数据或其他非代码文件,则这些文件足够小,可以包含在存档中,这对于 .zip 存档来说很容易,并且 anaconda-project 也很好地支持。如果你使用大型远程数据文件,你还需要一种方法来确保这些文件保持可用并被明确引用,这可能本身就很令人头疼(以及一个单独的主题)。如果你确实引用了任何外部数据文件,那么最好将数据的一个小子集直接包含在存档中,以便至少可以证明代码本身仍然可以可重复地运行,即使完整的数据稍后不再可用。当你想要在新数据上运行相同的代码,并且甚至不关心原始数据,但没有原始数据就无法使代码工作,或者如果你无法弄清楚代码将接受哪种类型的数据时,你以后会感谢自己的。
对于依赖于特殊硬件的代码(例如特定图形处理单元 (GPU) 型号、某种类型的计算集群或其他系统基础设施)也是如此。即使你的完整结果取决于这些专用系统,重要的是包含某些版本的代码,这些代码将在“通用”硬件上运行,以便你项目的未来用户能够验证基本代码在专用计算系统不再可用时仍然按预期工作。anaconda-project 支持多个命令,因此添加一个用于小型测试数据和/或有限计算平台的命令很简单。
这些级别还假设你的代码是运行然后完成并输出结果的东西。相反,如果你的代码是适合部署的东西,例如仪表板或 REST API,你应该争取级别 3 或更高级别,然后实际部署并监控结果,理想情况下使用持续集成系统进行测试,以确保新重启的部署将继续工作。部署带来了所有自身的难题,但如果你持续部署你的项目,你不仅可以确定它仍在工作,而且你将立即允许每个人使用你的工作。
无论你的情况如何,只需选择你对所涉及的工作和风险感到舒适的级别,但如果你的代码有任何价值,那么肯定至少选择级别 3!
关于作者
Jim Bednar 是 Anaconda, Inc. 的定制服务总监。Bednar 博士拥有德克萨斯大学计算机科学博士学位,以及电气工程和哲学学位。他发表了 50 多篇关于视觉系统、软件开发和可重复科学的论文和书籍。Bednar 博士管理 HoloViz 项目,这是一个开源 Python 工具集合,其中包括 Panel、hvPlot、Datashader、HoloViews、GeoViews、Param、Lumen 和 Colorcet。Bednar 博士于 2004 年至 2015 年在爱丁堡大学担任计算神经科学讲师和阅读器,此前曾在 National Instruments 从事硬件工程和数据采集工作。
关于创客博客系列
Anaconda 正在 每月博客系列 中放大其一些最活跃和最受珍视的社区成员的声音。如果你是一位创客,一直在寻找机会讲述你的故事、详细阐述你最喜欢的项目、教育你的同行并建立你的个人品牌,请考虑提交摘要。有关更多详细信息以及访问丰富的教育数据科学资源和讨论主题,请访问 Anaconda Nucleus。