研究软件就像塔式建筑游戏叠叠乐——工具在工具上的工具。当开发人员调整他们的各个部分,这可以改变的功能取决于他们的软件,可能改变结果,或者导致软件失败。

版本的3.6.0 R编程语言,例如,介绍了用于生成随机数的置换算法。这和老算法都工作,但是没有以同样的方式。“如果你跑一个旧版本的相同的代码R和R的新版本和使用任何功能,需要生成一个随机数,你会得到不同的结果,“蒂芙尼木头说,数据科学家在温哥华的英属哥伦比亚大学的,加拿大。

除此之外,这种变化可以使协作(参见“环境试验”)。2020年,我Cetinkaya-Rundel正与另一个作者统计教材,使用R和格式化的语言称为减价来计算数字,创建数据和格式最终文档。“我们想确保我们使用相同的版本,“Cetinkaya-Rundel说,达勒姆的杜克大学的统计学家北卡罗莱纳,”这本书,当我们重新呈现,我们使它与给定版本的包。“如果不是这样,两位作者可以生成不同的手稿。

环境测试

变量计算环境如何阻碍合作的一个例子。

假设你安装了R和Python的最新版本,但是你的合作者升级缓慢。他们想要与你们分享一个Python脚本,和你有一个R程序你想让他们使用。将代码工作在对方的手中?

Python 2和Python 3之间,“打印”命令,输出文本在屏幕上发生了变化。该指令打印“你好,世界!“Python 2中是有效的,但Python 3需要括号——打印(“hello, world !”)。同样,在R 4.0之前,创建电子表格的数据表的功能将文本视为离散的默认“因素”,而后来的版本则不是。

强调这些差异,我们创建脚本和环境对Python 2.7, Python 3.11 R 3.6和4.2(见go.nature.com/4tirjm7)。指令(见go.nature.com/4tnd5ke)后,安装conda。然后,打开一个终端窗口,运行安装脚本并执行run.sh。您应该看到一个环境中的代码正常工作而不是另一个。例如,虽然R脚本的行为预期的4.2——它改变性别的研究主题——它一些意想不到的(和问题警告)3.6 R。

应对这一挑战,他们转向了R包renv,一小群的一个工具,帮助开发人员和研究人员来管理他们的计算环境;其他选项包括venv和virtualenv Python, conda,一个语言无关的工具。大多数命令行实用工具,尽管renv RStudio桌面图形编程环境的紧密集成。所有可以帮助研究人员,以确保他们的代码是可再生的,可重用、记录和共享。

花招

c .提图斯布朗bioinformatician加州大学戴维斯,在他的笔记本电脑187 conda环境。大多数都是一次性的,用来测试新的工具或说明一个点在讲座。他的日常工作主要是发生在一个开发环境,包括一个特定版本的Python和其他编程工具。

然而,一些任务需要改变计算风景。例如,布朗在减价写博文,呈现为HTML,标准的web页面标记语言。但是代码执行这一步不工作和关键软件的新版本库,开发工具和旧版本冲突。布朗隔离问题,创建了一个单独的环境。“我只是固定的版本很旧,还是工作,我运行[渲染软件],”他说。

conda环境是一个计算的政治手腕,约翰内斯·科斯特说,大学的计算机科学家Duisburg-Essen在德国,他成立了一个bioinformatics-focused软件资源库Bioconda。“基本上,它只是修改您的系统路径,系统搜索可执行的地方(应用程序)。“您可能安装了多个版本的一个工具,但当conda激活一个特定的环境中,你的电脑只能看到一个你想要的。

计算环境提供许多好处,木头说。一个是再现性的能力分析相同的数据和软件相同的计算基础设施得到相同的结果。

“它可以很沮丧,跟踪输出之间的差异在不同的电脑,”Ben Marwick说,在西雅图华盛顿大学的考古学家。一些研究项目需要数年时间才能完成,他指出。尽管Marwick喜欢最新的库,他的同事并不总是相同的速度升级。Renv保证他和他的合作者总是以同样的方式运行他们的项目代码。由此产生的环境描述文件可以在GitHub版本控制和共享。合作者可以使用命令重新创建环境renv:恢复()

Conda是一个命令行工具,创建环境和安装软件。创建一个新的环境称为my_env固定到一个特定的版本的Python,例如,使用conda创建——名称my_env python = 3.9

R和conda都允许用户安装自己的工具,而不必要求系统管理员为他们做它。说:“你不需要root特权Rob Patro马里兰大学计算生物学家在大学公园。这是一个有用的功能当工作在共享计算资源。

环境经理还简化软件安装。科学软件经常发布源代码,这可能需要被编译,配置和安装在一个特定的位置。它可能有一个网络的依赖性,用多种编程语言,必须安装在一个特定的顺序。有时候,说bioinformatician弗雷德里克·Boulund在斯德哥尔摩卡罗林斯卡学院,这个过程可以超越用户的技能。“这完全改变了解决方案如conda进入现场时,”他说。“安装一组复杂的依赖关系是降低到要求conda创建一个环境根据环境规范文件。”

银河项目-一个开源框架,可再生的数据分析这些特性的一个主要原因是选择conda作为项目的软件安装管理器。星系Bioinformatician Bjorn Gruning,欧洲服务器在德国弗莱堡大学,说银河社区开始寻找一个有凝聚力的工具安装策略在2015年左右,因为现有的手工方式是不可持续的。“Conda责备我们所有要求盒子,“Gruning说。它不需要root特权;它是编程语言无关;使用人类可读的包配方,很容易理解和维护。今天,有超过9000的生物信息学工具星系用户通过Bioconda通道。

早期开始

然而,环境也许最大的好处是隔离:环境使研究人员探索新的或更新的工具,知道他们的代码仍将运行。

伊莱多数时候,统计在巴尔的摩的约翰霍普金斯大学,马里兰,形容自己是“宽松”时的环境:“对我来说,一切都在一个环境。“但更大的环境很难使用,因为环境经理必须解决一个更大的网络安装新工具的依赖性。(Conda与大型环境中表现不佳而臭名昭著,但dropin解析器称为曼巴加速这个过程。)相反,多数时候表明她的学生使用每个项目一个环境。

事实上,大多数研究人员联系为本文建议创建环境以适应特定的工作流或项目,这样做。“开始你的项目与一个包管理的解决方案,”约书亚·夏皮罗说,儿童癌症数据实验室的高级数据科学家亚历克斯的柠檬水站基础上,位于宾夕法尼亚州的宾夕法尼亚。“它有可能拯救很多头痛。”

汤米,计算生物学主任Immunitas疗法,生物技术公司沃尔瑟姆,马萨诸塞州,使用专用的环境不同的计算任务,处理数据从RNA序列或在谷歌云工作,例如。

用户Snakemake甚至Nextflow计算工作流管理人员可以直接执行这些工具在一个单独的每一步conda环境,科斯特说,领导Snakemake发展。“让他们尽可能细粒度和专用,”他建议。除了更容易维护,他解释说,小环境也更加透明。“那些想了解分析确实立即看到了什么软件堆栈是用于这一步。”

限制

然而,环境不能做所有的事。工具编写的语言如C、Perl和Fortran很难封装到环境中,和依赖差异跨操作系统可以使环境难以端口。在这种情况下,用户可以尝试软件容器,如从码头工人和奇点。

容器,它本质上包一个工具的底层操作系统,比环境更大、更复杂,但更便携。他们也更容易分享,因为尽管一个环境可以容纳成千上万的文件,只有一个容器。在高性能系统中工作可以并行运行在数以百计的计算核心,传输许多小文件如何影响性能。

木头说,计算环境是再现性的“被遗忘的孩子”。期刊越来越要求代码和数据与手稿,但完整的再现性需要知道他们运行的环境。“这是房间里的大象,”她说。