Skip to content

在服务器上安装SpatialTE

约 389 个字 134 行代码 预计阅读时间 4 分钟

SpatialTE 是一个以空间转录组学对TE进行分析的软件,其基于 MIT 许可开源分发,有关论文原文参阅此处

项目仓库点此跳转

环境基本信息

  • Server OS: Ubuntu 20.04.6 LTS
  • APT Version: 2.0.9(amd64)
  • Anaconda Version: conda 24.11.2

跟着README走

SpatialTE项目开发者在README中推荐通过conda部署,其给出的基本步骤如下:

conda env create -f SpatialTE.yml
pip install stpipeline==1.7.9
chmod u+x spatialte_v1.0/*
export PATH=$PATH:/path/to/spatialte

在这个过程中主要遇到了两个问题,第一个是其给出的SpatialTE.ymlsamtools的版本在conda的仓库中可能没办法找到适配版本的依赖,如果在第一步遇到相应的问题,则使用以下的SpatialTE.yml

name: SpatialTE
channels:
  - bioconda
  - conda-forge
  - defaults
dependencies:
  - python=3.8
  - samtools
  - bedtools=2.29.2
  - r=4.0.0

好潦草的一个解决方式……(吐槽

第二步pip则遇到了较大的问题,当时的报错提示有ERROR: Failed building wheel for taggd这个重要信息,tagged是一个预构建的二进制发行版,而pip需要一些依赖才能将其编译为wheel文件,这个报错是因为缺乏相应依赖导致的,我通过更新pip与相应依赖来解决:

pip install --upgrade pip setuptools wheel

之后就很顺利了~

通过Docker部署

我一开始就想以Docker的方式安装SpatialTE,一方面是这样子可以尽可能模拟从0开始安装这个软件所需的各种依赖,另一方面是手痒了想练练(

我使用的Dockerfile文件可见下方,点此下载

# ==============================
# 预构建
FROM ubuntu:22.04 AS builder

# 预构建依赖
RUN apt-get update -qq && apt-get install -y --no-install-recommends --fix-missing\
    build-essential \
    wget \
    curl \
    # wget: 是的孩子们我需要证书
    ca-certificates \
    autoconf \
    automake \
    make \
    gcc \
    perl \
    # bedtools: 是的孩子们我找不到python
    python3 \
    python-is-python3 \
    zlib1g-dev \
    libbz2-dev \
    liblzma-dev \
    libcurl4-gnutls-dev \
    libssl-dev \
    libncurses5-dev \
    libdeflate-dev && \
    rm -rf /var/lib/apt/lists/*

# 编译 BEDTools
ENV BEDTOOLS_VERSION=2.29.2
WORKDIR /opt
RUN wget -q https://github.com/arq5x/bedtools2/releases/download/v${BEDTOOLS_VERSION}/bedtools-${BEDTOOLS_VERSION}.tar.gz && \
    tar -zxvf bedtools-${BEDTOOLS_VERSION}.tar.gz && \
    cd bedtools2 && \
    make

# 编译 Samtools
ENV SAMTOOLS_VERSION=1.11
WORKDIR /opt
RUN wget -q https://github.com/samtools/samtools/releases/download/${SAMTOOLS_VERSION}/samtools-${SAMTOOLS_VERSION}.tar.bz2 && \
    tar -xjf samtools-${SAMTOOLS_VERSION}.tar.bz2 && \
    cd samtools-${SAMTOOLS_VERSION} && \
    ./configure --prefix=/usr/local && \
    make && \
    make install

# ==============================
# 镜像
FROM ubuntu:22.04

ENV DEBIAN_FRONTEND=noninteractive
ENV ROOT_DIR=/opt

# 运行依赖
RUN apt-get update -qq && apt-get install -y --no-install-recommends \
    git \
    wget \
    curl \
    # wget: 是的孩子们我需要证书
    ca-certificates \
    unzip \
    python3 \
    python3-pip \
    # samtools  bedtools 的运行时依赖
    zlib1g \
    libbz2-1.0 \
    liblzma5 \
    libcurl4 \
    libssl3 \
    libncurses5 \
    libdeflate0 \
    # R 的依赖
    software-properties-common \
    dirmngr && \
    rm -rf /var/lib/apt/lists/*

# 安装R,来自上交镜像
RUN apt update -qq && \
    apt install --no-install-recommends software-properties-common dirmngr -y && \
    wget -qO- https://cloud.r-project.org/bin/linux/ubuntu/marutter_pubkey.asc | tee -a /etc/apt/trusted.gpg.d/cran_ubuntu_key.asc && \
    add-apt-repository "deb https://cloud.r-project.org/bin/linux/ubuntu $(lsb_release -cs)-cran40/" && \
    apt install --no-install-recommends r-base -y

# 安装 ST Pipeline
ENV ST_PIPELINE_VERSION=1.7.9

# stpipeline: 是的孩子们我也干了[○・`Д´・ ○]
# 补齐build-essential 与 python3-dev,安装完后删掉
RUN apt-get update -qq && \
    apt-get install -y --no-install-recommends build-essential python3-dev && \
    pip3 install --no-cache-dir stpipeline==${ST_PIPELINE_VERSION} && \
    apt-get purge -y --auto-remove build-essential python3-dev && \
    rm -rf /var/lib/apt/lists/*

# 复制工具
COPY --from=builder /opt/bedtools2/bin/* /usr/local/bin/
COPY --from=builder /usr/local/bin/samtools /usr/local/bin/

# 安装 SpatialTE
# ==============================
# COPY源码来自SpatialT仓库,构建镜像前先手动在Dockerfile同目录下执行git clone https://github.com/bvaldebenitom/SpatialTE.git
# ==============================
ENV SPATIALTE_VERSION=1.0
ENV SPATIALTE_DIR=${ROOT_DIR}/spatialTE-${SPATIALTE_VERSION}

WORKDIR ${SPATIALTE_DIR}

COPY ./SpatialTE/release_1.0 ${SPATIALTE_DIR}/

RUN chmod -R u+x ${SPATIALTE_DIR}/

ENV PATH="${SPATIALTE_DIR}:${PATH}"

# 默认工作目录
WORKDIR /data

# 首先在本地准备好一个文件夹,包含数据文件
# 然后通过如下命令启动容器
# docker run --rm -it -v "path/to/your/data":/data -w /data your/image/name bash

至于镜像……还没研究过怎么push到docker hub上哈哈哈,之后再说吧。