内容

1为什么?

包就像网状促进在基于r的数据分析中使用Python模块,使我们能够利用Python在机器学习和图像分析等领域的优势。然而,众所周知,要确保具有一致版本的模块集提供一致版本的Python是非常困难的,特别是在使用Python的系统安装时。因此,我们不能轻易保证某些Python代码通过网状在一台计算机上运行相同的代码将产生与在另一台计算机上运行相同的结果。也有可能两个R包依赖于不兼容的Python模块版本,这样就不可能同时使用两个包。这些版本问题是通过R/Bioconductor包跨各种系统可靠执行Python代码的主要障碍。

2什么?

蛇怪使用conda安装程序提供一个完全由Bioconductor安装机制管理的Python实例。这为下游Bioconduct2021欧洲杯体育投注开户or包的开发人员提供了对其Python环境的更多控制,最典型的方法是创建特定于包的包conda包含所有所需Python包的环境。此外,蛇怪提供了在单个R会话中管理不同Python环境的实用程序,使多个Bioconductor包在单个分析过程中使用不兼容的Python包版本。这些特性支持可重复的分析,简化代码调试,并提高兼容包之间的互操作性。

3.如何?

3.1概述

son.of.basilisk包(在本月/例子目录)作为一个示例,说明如何编写依赖于蛇怪.这是一个完全可操作的示例包,可以安装和运行,因此潜在的开发人员应该使用它作为自己的包的模板。2021欧洲杯体育投注开户我们将假设读者熟悉一般的R包开发实践,并将我们的讨论限制在蛇怪特殊元素。

3.2设置包

StagedInstall:不,以确保Python包在R包安装目录中以正确的硬编码路径安装。

进口:蛇怪应该与适当的指示一起设置名称空间对所有蛇怪使用的函数。

.BBSoptions应该包含UnsupportedPlatforms: win32,因为不支持Windows 32位上的构建。

3.3创建环境

通常,我们需要使用所需的包创建一些环境conda包管理器。一个蛇怪。R文件应该出现在R /子目录,其中包含生成BasiliskEnvironment对象。这些对象定义要构造的Python环境蛇怪代表您的客户包。

my_env <- BasiliskEnvironment(envname="my_env_name", pkgname="ClientPackage", packages=c("pandas==0.25.1", "sklearn==0.22.1")) second_env <- BasiliskEnvironment(envname="second_env_name", pkgname="ClientPackage", packages=c("scipy=1.4.1", "numpy==1.17"))

如上所示,所有列出的Python包都应该具有有效的版本号,可以通过conda.强烈建议显式地列出任何依赖项的版本,以便为安装过程提供未来的保障。我们建议使用listPackages ()有关识别适当版本的信息,请参见setupBasiliskEnv ?获取详细信息。方法从PyPi安装包也是可能的皮普=论点,但是这应该被解决多小心

一个可执行的配置应该在客户端包的顶层创建一个文件,其中包含如下所示的命令。这允许在期间创建环境蛇怪如果安装BASILISK_USE_SYSTEM_DIR是集。

# !/bin/sh ${R_HOME}/bin/Rscript -e "basilisk::configureBasiliskEnv()"

出于完整性的考虑,configure.win还应创建:

# !/bin/sh ${R_HOME}/bin${R_ARCH_BIN}/Rscript.exe -e "basilisk::configureBasiliskEnv()"

3.4使用环境

任何使用Python代码的R函数都应该通过basiliskRun (),这确保了不同的Bioconductor包在依赖冲突时可以很好地运行。使用方法从my_env我们之前定义的环境,我们假设的函数ClientPackage包应该定义如下函数:

my_example_function <- function(ARG_VALUE_1, ARG_VALUE_2) {proc <- basiliskStart(my_env) on.exit(basiliskStop(proc)) some_useful_thing <- basiliskRun(proc, function(arg1, arg2) {mod <- reticulate::import(" sciket -learn") output <- mod$some_calculation(arg1, arg2) #返回值必须是纯R对象,即没有网状# Python对象,没有共享内存指针。输出},arg1=ARG_VALUE_1, arg2=ARG_VALUE_2) some_useful_thing}

的返回值。basiliskRun ()必须是纯R对象。2021欧洲杯体育投注开户开发者不应返回网状绑定到Python对象或任何其他指向外部内存的指针(例如,文件句柄)。这是因为basiliskRun ()可以在不同的进程中执行,这样当指针被传输回父进程时,它们将不再有效。传递给函数的两个参数basiliskRun ()和它的返回值必须服从序列化。2021欧洲杯体育投注开户鼓励开发人员通过设置来检查他们的函数在不同进程中的行为是否正确setBasiliskShared(假)而且setBasiliskFork(假)在测试之前。

请注意,basiliskStart ()如果conda和所需的环境尚未存在,则会延迟安装。这可能导致任何函数在第一次使用时出现一些延迟蛇怪被称为;之后,安装的内容将被重用。

使用它可能是不明智的proc跨用户可见的功能,也就是说,终端用户不应该有机会与之交互proc

4额外的笔记

4.1重要的限制

如果安装目录包含空格,Miniconda/Anaconda安装程序将无法工作。如果是这种情况,请考虑设置BASILISK_EXTERNAL_DIR环境变量(见下文)。

Windows的文件路径限制为260个字符;由于某些包的目录嵌套太深,可能会超出这个范围,导致安装不完整或完全失败。不支持32位Windows的构建,因为相对于设置它的难度而言,需求不足。

MacOSX上的Rstudio的旧版本在生成独立进程方面有一些困难在这里).在这种情况下,用户应该设置:

parallel:::setDefaultClusterOptions(setup_strategy = "sequential")

重要!自动安装由代理蛇怪假定用户接受水蟒的服务条款.这主要归结为“不要用请求冲击Anaconda存储库”,参见注释在这里

4.2修改环境变量

这里描述的所有环境变量都必须在安装时和运行时设置才能发挥作用。如果更改了任何值,通常最安全的方法是重新安装蛇怪以及所有的客户。

设置BASILISK_EXTERNAL_DIR环境变量将更改放置conda实例和环境的位置basiliskStart ()在延迟安装期间。这通常是不必要的,除非生成的默认路径rappdirs包含空格或默认位置和conda的目录结构的组合超过了Windows上的文件路径长度限制。

设置BASILISK_USE_SYSTEM_DIR1将指导蛇怪在R包安装过程中,安装R系统目录下的conda实例。同样,all(正确配置D)客户端包将在安装它们自己时将它们的环境安装到相应的系统目录中。这对于企业级部署非常有用,因为conda实例和环境(i)在每个用户的主目录中都不重复,并且(ii)对访问R安装的任何用户都是可用的。但是,它需要从源代码安装,因此没有默认设置。

导演是可能的蛇怪来使用现有的Miniconda或Anaconda实例BASILISK_EXTERNAL_CONDA环境变量设置为安装目录的绝对路径。这可能是为了避免相同安装的冗余副本。然而,在这种情况下,它是用户的责任来管理它们的conda实例,以确保所有包的正确版本可用于蛇怪的客户。

设置BASILISK_NO_DESTROY1将指导蛇怪的新版本安装时,销毁以前的conda实例和环境蛇怪.这种销毁是默认情况下进行的,以避免积累大量过时的大型conda实例。但是,如果有多个R实例运行不同版本的蛇怪因为一个R实例的安装会删除另一个R实例的安装内容。(运行不同版本的Bioconductor的多个R实例不受影响。)此选项在以下情况下无效BASILISK_USE_SYSTEM_DIR是集。

4.3自定义环境创建

给定一条路径,basiliskStart ()可以在任何conda或虚拟环境中运行,而不仅仅是那些由蛇怪.可以使用Python 2.7手动设置所需的环境,也可以手动修改现有环境,以包括PyPi或Conda中没有的自定义Python包。这允许用户继续利用蛇怪在更复杂的应用程序中对Python冲突的优雅处理。然而,保证可移植性是相当困难的,因此应该尽量避免这样做。

会话信息

sessionInfo ()
## R版本4.2.0 RC (22-04-19 r82224) ##平台:x86_64-pc-linux-gnu(64位)##运行在:Ubuntu 20.04.4 LTS ## ##矩阵产品:default ## BLAS: /home/biocbuild/bbs-3.15-bio /R/lib/libRblas. ##因此## LAPACK: /home/biocbuild/bbs-3.15-bio /R/lib/libRlapack。因此## ## locale: ## [1] LC_CTYPE=en_US。UTF-8 LC_NUMERIC= c# [3] LC_TIME=en_GB LC_COLLATE= c# [5] LC_MONETARY=en_US。utf - 8 LC_MESSAGES = en_US。UTF-8 ## [7] LC_PAPER=en_US。UTF-8 LC_NAME= c# [9] LC_ADDRESS=C LC_TELEPHONE= c# [11] LC_MEASUREMENT=en_US。UTF-8 LC_IDENTIFICATION=C ## ##附加的基本包:## [1]stats graphics grDevices utils datasets methods base ## ##其他附加的包:## [1]basilisk_1.8.0 biocstyle_1 .24.0 ## ##通过命名空间加载(并没有附加):# [1] Rcpp_1.0.8.3 knitr_1.38 magrittr_1 .0.3 ## [4] lattice_0.20-45 r6_1 .5.1 rlang_1.0.2 ## [7] fastmap_1.1.0 stringgr_1 .4.0 tools_4.2.0 ## [10] grid_4.2.0 parallel_4.2.0 xfun_0.30 ## [13] png_0.1-7 cli_3.3.0 jquerylib_0.1.4 ## [13] htmltools_0.5.2 yaml_2.3.5 digest_0.6.29 ## [19] bookdown_0.26 Matrix_1.4-1 dir.expiry_1.4.0 ## [22] BiocManager_1.30.17 sass_0.4.1 basilisk. utis_1.8.0 ## [25] evaluate_0.15 rmarkdown_2.14 stringi_1.7.6 ## [28] compiler_4.2.0 bslib_0.3.1 filelock_1.0.2 ## [31]reticulate_1.24 jsonlite_1.8.0