这可能就是您!点击 这里 提交我们创客博客系列的摘要。
恭喜!您已经编写了一些有用的 Python 代码。现在呢?您能够在明天、一年后或十年后运行这段代码吗?如果您将它交给其他人,他们能够运行它吗?您能否将其设置为在您不在场的情况下定期运行,或者将其部署到服务器上而无需您记住特殊信息?
如果您没有计划可重复性,那么所有这些问题的答案几乎肯定都是“否”。Python 程序通常建立在来自各种单独安装库的代码基础上,如果其中一个库不可用,或者其版本与您使用的版本不同(更早或更新),您的代码很容易停止工作。幸运的是,Python 有工具可以捕获所有这些依赖项,这样您就可以实现几乎任何级别的可重复性,尽管每个新级别都需要更多工作,并且需要更多磁盘空间或其他资源。
作为一份有帮助的指南,这里列出了可重复性的递增水平;只需选择您需要的级别并按照说明进行操作即可!我们假设您要复制的代码以 Jupyter 笔记本代码单元中的 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 年爱丁堡大学计算神经科学讲师和读者,此前曾在国家仪器公司从事硬件工程和数据采集工作。
关于 Maker 博客系列
Anaconda 在一个 每月博客系列中放大了一些最活跃和最受喜爱社区成员的声音。如果您是 Maker,一直在寻找机会讲述您的故事,详细说明您最喜欢的项目,教育您的同龄人并建立您的个人品牌,请考虑 提交摘要。有关更多详细信息以及如何访问大量教育性数据科学资源和讨论主题,请访问 Anaconda Nucleus。