前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >端到端的单细胞管道SCP-安装

端到端的单细胞管道SCP-安装

作者头像
生信技能树jimmy
发布2023-09-19 18:47:21
1.1K0
发布2023-09-19 18:47:21
举报
文章被收录于专栏:单细胞天地单细胞天地

积土而为山,积水而为海

SCP的完整安装分为两个部分,一个是R包安装,另一个是内部的python环境构建。

如果不需要运行一些python相关的方法则可以跳过下面的[创建SCP的python环境】步骤。


1、安装到全局环境中

这里的全局环境是指R的默认包路径(在R中通过.Library查看),与之相反的是后文中使用renv所创建的隔离环境。

R版本要求:

  • R >= 4.1.0

Python版本要求:

  • Python 3.7-3.9

注意,实际上Python版本并不重要,因为无需手动配置python环境,使用SCP中的PrepareEnv函数会自动下载安装所需版本的conda、python以及软件包。

1.1 R包安装

  1. 从GitHub上自动下载安装最新版本的SCP(推荐):
代码语言:javascript
复制
if (!require("devtools", quietly = TRUE)) {
  install.packages("devtools")
}
devtools::install_github("zhanghao-njmu/SCP")
  1. 手动安装:

用各种方式下载好R包,比如在R中可以运行命令:

代码语言:javascript
复制
download.file("https://github.com/zhanghao-njmu/SCP/archive/refs/tags/v0.5.1.tar.gz", destfile = "SCP.tar.gz")
  • 使用devtools::install_local自动安装SCP及相关依赖(这种安装过程可以自动寻找安装依赖包):
代码语言:javascript
复制
devtools::install_local("SCP-0.5.1.tar.gz")
  • 或使用install.packages安装SCP(如果缺失依赖包会报错,需要再根据提示手动逐一安装依赖包):
代码语言:javascript
复制
install.packages("SCP-0.5.1.tar.gz", repos = NULL, type = "source")

1.2 创建SCP的python环境

当SCP首次安装好之后,运行library(SCP)会有下面的提示:

代码语言:javascript
复制
library(SCP)

## > SCP python environment not found.
## > If you have already created an SCP python environment using conda, you can specify the conda path by setting options(reticulate.conda_binary = "/path/to/conda", SCP_env_name = "SCP_env") before loading the package.

这不是报错,你可以继续使用SCP的大部分功能,也可以运行SCP::PrepareEnv()来继续构建SCP所需的python环境和软件包,来运行RunPAGARunSCVELO等python方法。

国内用户建议使用镜像,可用的一些镜像地址可在GitHub上找到,一般可以直接运行下面的代码完成创建:

代码语言:javascript
复制
SCP::PrepareEnv(
  miniconda_repo = "https://mirrors.bfsu.edu.cn/anaconda/miniconda",
  pip_options = "-i https://pypi.tuna.tsinghua.edu.cn/simple"
)

当想重装python环境时,PrepareEnv还可以通过设置下面的两个参数之一来进行安装:

  • force = TRUE表示强制安装,也就是会删除已存在的python环境和软件包
  • conda = NULL会重新下载安装miniconda,此时也会删除已存在的python环境并重装

PrepareEnv函数的过程大致是:

  1. 寻找环境中可用的conda, 用户也可以手动设置conda路径:
代码语言:javascript
复制
options(reticulate.conda_binary = "/path/to/conda")

如果找不到会根据miniconda_repo自动下载miniconda,安装到miniconda到以下路径:

  • linux: ~/.local/share/r-miniconda
  • osx: ~/Library/r-miniconda
  • win: C:/Users/xxx/AppData/Local/r-miniconda
  1. 寻找SCP的python环境,默认环境名称是SCP_env,用户也可以手动设置环境名称:
代码语言:javascript
复制
options(SCP_env_name = "new_name")

如果找不到环境则自动创建,创建环境时使用的python版本默认为3.8(conda自动下载)

  1. 检查环境中的python包版本,这里要求比较严格,以保证各软件兼容,如果找不到对应版本的包,则会使用pip自动下载。这里使用pip安装包而不是用conda的原因有两个,一个是快,另外一个是有些包使用conda自动安装后可能无法使用,对个人环境和权限有要求。

2、安装到隔离的R环境中

SCP会牵扯许多依赖包,如果不想干扰当前的环境,比如一些依赖包的版本不想在安装时被改变,或者想将SCP及其依赖包设定在一个固定版本避免更新,来保证重复性,我们可以使用renv。类似于conda环境,R也可以使用renv创建一个独立的R包环境。

  1. 首先我们要创建一个隔离的R环境:
代码语言:javascript
复制
if (!require("renv", quietly = TRUE)) {
  install.packages("renv")
}
dir.create("~/SCP_env", recursive = TRUE) ## It cannot be the home directory "~" !
renv::init(project = "~/SCP_env", bare = TRUE, restart = TRUE)
  1. 在隔离环境中安装SCP:
  • 如果全局环境中没有SCP,则运行:
代码语言:javascript
复制
renv::activate(project = "~/SCP_env")
renv::install("BiocManager")
renv::install("zhanghao-njmu/SCP", repos = BiocManager::repositories())
SCP::PrepareEnv(
  miniconda_repo = "https://mirrors.bfsu.edu.cn/anaconda/miniconda",
  pip_options = "-i https://pypi.tuna.tsinghua.edu.cn/simple"
)
  • 如果全局环境中已经安装好了SCP,则运行:
代码语言:javascript
复制
renv::activate(project = "~/SCP_env")
renv::hydrate("SCP")
SCP::PrepareEnv(
  miniconda_repo = "https://mirrors.bfsu.edu.cn/anaconda/miniconda",
  pip_options = "-i https://pypi.tuna.tsinghua.edu.cn/simple"
)
  1. 使用SCP前激活环境:
代码语言:javascript
复制
renv::activate(project = "~/SCP_env")

library(SCP)
data("pancreas_sub")
pancreas_sub <- RunPAGA(srt = pancreas_sub, group_by = "SubCellType", linear_reduction = "PCA", nonlinear_reduction = "UMAP")
CellDimPlot(pancreas_sub, group.by = "SubCellType", reduction = "draw_graph_fr")
  1. 保存SCP环境的状态,当一些包版本改动后可以恢复至保存的状态:
代码语言:javascript
复制
renv::snapshot(project = "~/SCP_env")
## The versions of some packages have been modified.
renv::restore(project = "~/SCP_env")

关于隔离环境的详细使用说明,请参考renv的文档:https://rstudio.github.io/renv/articles/renv.html


3、常见问题

3.1、ERROR: dependency ‘xxx’ is not available for package ‘SCP’

这是因为安装依赖于一些Bioconductor的包,但是找不到可以该包所在的仓库。

解决办法是在R中运行:

代码语言:javascript
复制
if (!require("BiocManager", quietly = TRUE)) {
  install.packages("BiocManager", lib = lib)
}
options(repos = BiocManager::repositories())

之后再安装SCP或依赖包。

3.2、Timeout was reached: [api.github.com] Connection timed out after 10005 milliseconds

下载连接超时,在R中设置”options(timeout=10000)“或者手动下载安装包进行安装,参考上文[R包安装]

3.3、namespace ‘xxx’ xxx is already loaded, but >= xxx is required.

简单来说,就是”当前的R session中已经载入了一个旧的包,需要将其升级”。

一般情况下按照提示install.packages('xxx')就可以了,但是很多人可能发现问题依然会出现。

也会有很多人发现一些蹊跷的地方,比如:

  • 自己根本没有加载过这个当事”包”
  • 当事”包”版本明明已经符合,但是仍然报错

实际上,这个问题常出现在Rstudio中。在Rstudio打开一个新的session,按几个回车没那么快反应出命令提示符>的话,那应该是你的rstudio正在帮你载入一些包,其中就会包括这些当事”包”。

所以一步到位的解决办法就是:打开R console(而非Rstudio)–> install.packages(‘xxx’) –> 再次安装SCP或者你所需要的包

如果想在Rstudio中避免启动session后就载入一些包,可以取消Rstudio所有的启动后加载功能:打开Tools –> Global Options –> General,将下图的选项框全部取消勾选:

3.4、Error: package or namespace load failed for ‘dbplyr’

问题和之前的namespace 'xxx' xxx is already loaded, but >= xxx is required.是类似的,R session启动时被预先加载了一些包,导致无法正常加载dbplyr

有两种解决办法:

  1. 在R console加载运行SCP,或者取消Rstudio所有的启动后加载功能;
  2. 在你的home目录下或者R project目录下, 新建.Rprofile(它是R的启动文件,会在R环境启动时自动加载),将library(dbplyr)或者直接将library(SCP)写入其中即可。

3.5、‘…SCP_env/lib/libpython3.8.dylib’ (mach-o file, but is an incompatible architecture (have ‘arm64’, need ‘x86_64’))

conda的版本与处理器架构不符,需要x86_64而当前安装的是arm64,解决办法是重新下载安装miniconda/anaconda,或者在R中使用以下命令重装miniconda:

代码语言:javascript
复制
SCP::PrepareEnv(
  conda = NULL,
  miniconda_repo = "https://mirrors.bfsu.edu.cn/anaconda/miniconda",
  pip_options = "-i https://pypi.tuna.tsinghua.edu.cn/simple",
  force = TRUE
)

3.6、已经顺利安装好了SCP的python环境,但是library(SCP)后仍然提示”SCP python environment not found.”

这是因为一个R session下通过reticulate对python的调用是单次的。

如果此前已经运行library(reticulate)调用了一个python,且该python不是SCP所用的python(版本不符合或当中没有SCP的python环境),则需要重新启动一个新的R session再运行library(SCP)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-09-14 21:10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 单细胞天地 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、安装到全局环境中
    • 1.1 R包安装
      • 1.2 创建SCP的python环境
      • 2、安装到隔离的R环境中
      • 3、常见问题
        • 3.1、ERROR: dependency ‘xxx’ is not available for package ‘SCP’
          • 3.2、Timeout was reached: [api.github.com] Connection timed out after 10005 milliseconds
            • 3.3、namespace ‘xxx’ xxx is already loaded, but >= xxx is required.
              • 3.4、Error: package or namespace load failed for ‘dbplyr’
                • 3.5、‘…SCP_env/lib/libpython3.8.dylib’ (mach-o file, but is an incompatible architecture (have ‘arm64’, need ‘x86_64’))
                  • 3.6、已经顺利安装好了SCP的python环境,但是library(SCP)后仍然提示”SCP python environment not found.”
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档