2019년 8월 28일 수요일

QIIME 1 어렵게 설치하기

이미 대세는 QIIME 2(공식 웹사이트)라고 생각되는데 왜 이제와서 QIIME 1인가? 사실 내가 쓰는 서버에도 qiime2가 conda environment(v2019.1) 및 docker image(v2018.11)로 설치된 상태라서 이런 수고를 할 필요는 없었다. 그러나 요즘 읽고 있는 논문 "Microbiota and cancer immunotherapy: in search of microbial signals"(Gut 2019 Vol 68 No 3)에 큰 흥미를 느껴서 여기에서 수행한 분석 방법을 따라서 연습을 해 보기로 마음을 먹었다. 최근 면역체크포인트 억제제(PD-1 억제제)를 사용한 항암 치료가 개인에 따라서 다른 치료 성적을 보이며(R: responding vs NR: non-responding), 그것은 microbiome과 연관이 있다는 논문이 발표되어 큰 주목을 끌었다. 다음은 사례로 든 논문 세 가지. 전부 2018년 Science에 연달아서 발표된 논문이다. 나는 이 중에서 Gopalakrishnan et al이 쓴 논문의 16S sequencing raw data를 가지고 연습을 할 생각이다.

[12] Routy B, Le Chatelier E, Derosa L, et al. Gut microbiome influences efficacy of PD-1-based immunotherapy against epithelial tumors. Science 2018;359:91–7.
[13]  Gopalakrishnan V, Spencer CN, Nezi L, et al. Gut microbiome modulates response to anti-PD-1 immunotherapy in melanoma patients. Science 2018;359:97–103.
[14]  Matson V, Fessler J, Bao R, et al. The commensal microbiome is associated with anti-PD-1 efficacy in metastatic melanoma patients. Science 2018;359:104–8.


2019년도 Gut 논문에서는 이상의 세 가지의 연구 사례에서 공통적인 'microbial signal'이 없다는 점에 착안하여 같은 분석 파이프라인을 적용하여 어떤 결과가 나오는지를 살펴보기로 한 것이다. 16S 데이터는 QIIME 1.9.1을, shotgun metagenome data는 MetaPhlAn2를, R과 NR 집단에 연관된 바이오마커 동정에는 LEfSe를 사용하였다. 결론에서는 taxonomic profiling으로는 두 집단을 가르는 '미생물 시그날'을 찾아내긴 어려우며, function의 차이를 유의해서 보아야 될 것이라 하였다. 그러려면 shotgun 방색의 metagenomics가 앞으로는 더욱 중요하다는 뜻이 된다. 예전에는 assembly 기반의 shotgun metagnomic에 관심이 많았었지만 용도에 따라서는 그럴 필요가 없다고 느껴진다.

QIIME Installation Guide에 따르면 Miniconda에서 환경을 만들라고 하였다. 파이썬은 2.7을 쓰라고 하였다. 나는 Anaconda를 설치해 두었으니 여기에서 시작하면 되겠다고 생각을 했다. 그런데...

(base) $ conda create -n qiime1 python=2.7 qiime matplotlib=1.4.3 mock nose -c bioconda
...
PackagesNotFoundError: The following packages are not available from current channels:

  - matplotlib=1.4.3

matplotlib의 버전(1.4.3)이 너무 옛날 것인가? 채널에 해당되는 버전이 없다는 에러 메시지가 나왔다. 그래서 matplotlib 뒤에 지정된 버전을 지우기도 하고, 파이썬만 있는 qiime1 conda environment만 먼저 만들어서 여기에 진입하여 qiime1을 설치하는 등 여러 시도를 했지만 'Package XYZ conflicts for:'에러가 수십개나 발생하는 것이다. 이래서는 도저히 안되겠다 싶어서 alternative installation methods document를 확인하였다. 시스템에 원래 설치된 python 2.7에서 관리자 권한으로 pip를 사용하여 최소 설치를 하면 될 것이라 생각을 하였다.

회사 환경은 SSL 인증서 문제로 프로그램 설치가 참 까다롭다. conda, git, pip... 뭐 하나 쉬운 것이 없다. pip를 쓰려면 명령행에 누더기처럼 --trusted-host pypi.org --trusted-host files.pythonhosted.org를 덧붙여야 한다.

문서를 보면 먼저 numpy를 설치하란다. 이는 이미 설치가 되어 있는 상태이다. 그러면 본격적으로 QIIME 1.9.1을 깔아보자!

# pip install qiime==1.9.1 --trusted-host pypi.org --trusted-host files.pythonhosted.org
...
ERROR: ipython 5.8.0 has requirement setuptools>=18.5, but you'll have setuptools 0.9.8 which is incompatible.
ERROR: ipapython 4.6.4 has requirement dnspython>=1.15, but you'll have dnspython 1.12.0 which is incompatible.
ERROR: ipapython 4.6.4 has requirement python-ldap>=3.0.0b1, but you'll have python-ldap 2.4.15 which is incompatible.

이건 또 뭔가? setuptools, dnspython, 그리고 python-ldap만 수동으로 설치하면 되려나? pip install로 하나씩 설치를 해 나가는데 또 이런 에러 메시지가 나왔다.

ERROR: Cannot uninstall 'XYZ'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.

구글을 뒤져보니 이 에러는 distutils가 설치한 프로그램이라서 정확히 어떤 파일이 제거되어야 하는지 알 수 없다라는 의미라고 한다(distutils는 uninstaller 를 가지고 있지 않아서 distutils로 설치하면 지우기가 어렵다고 함). 이런 경우에는 --ignore-installed 옵션을 쓰라고 한다. 즉 다음과 같이 하여 별로 필요하지 않은 requirement를 일일이 점검하지 않고 다시 QIIME을 설치하게 만들었다.

# pip install --ignore-installed qiime==1.9.1 --trusted-host pypi.org --trusted-host files.pythonhosted.org

설치가 끝났으면 테스트 스크립트를 실행한다.

# print_qiime_config.py -t
...
ImportError: No module named Tkinter

이것은 또 뭔가? Tkinter라는 Tcl/Tk 파이썬 인터페이스 패키지가 없다는 에러이다. 전에도 본 일이 있다. yum으로 tkinter를 설치하면 된다. 우분투용 패키지 이름은 python-tk, python3는 python3-tk라고 한다. 내 환경은 CentOS 7이다.

자, 그러면 다 되었겠지?

# print_qiime_config.py -t
AssertionError: Unsupported FastTree version. 2.1.3 is required, but running 2.1.10.

아이고, 별게 다 속을 썩인다. FastTree-2.1.3 소스 코드를 가져다가 컴파일하였다.

# mkdir /usr/local/apps/FastTree-2.1.3
# cd /usr/local/apps/FastTree-2.1.3
# wget http://www.microbesonline.org/fasttree/FastTree-2.1.3.c
# gcc -O3 -finline-functions -funroll-loops -Wall -o FastTree FastTree.c -lm
# ln -s FastTree fasttree

방금 빌드한 fasttree 바이너리가 가장 먼저 인식되도록 PATH 변수를 수정한 다음 다시 print_qiime_config.py -t를 실행하였다. 드디어 에러가 하나도 발생하지 않았다. 얼마나 반가운 OK 사인인가!

# PATH=/usr/local/apps/FastTree-2.1.3:$PATH
# print_qiime_config.py -t


System information
==================
         Platform: linux2
   Python version: 2.7.5 (default, Jun 20 2019, 20:27:34)  [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]
Python executable: /usr/bin/python

QIIME default reference information
===================================
For details on what files are used as QIIME's default references, see here:
 https://github.com/biocore/qiime-default-reference/releases/tag/0.1.3

Dependency versions
===================
          QIIME library version: 1.9.1
           QIIME script version: 1.9.1
qiime-default-reference version: 0.1.3
                  NumPy version: 1.16.5
                  SciPy version: 1.2.2
                 pandas version: 0.24.2
             matplotlib version: 2.2.4
            biom-format version: 2.1.7
                   h5py version: Not installed.
                   qcli version: 0.1.1
                   pyqi version: 0.3.2
             scikit-bio version: 0.2.3
                 PyNAST version: 1.2.2
                Emperor version: 0.9.61
                burrito version: 0.9.1
       burrito-fillings version: 0.1.1
              sortmerna version: SortMeRNA version 2.0, 29/11/2014
              sumaclust version: SUMACLUST Version 1.0.00
                  swarm version: Swarm 1.2.19 [Aug 28 2019 11:29:13]
                          gdata: Installed.

QIIME config values
===================
For definitions of these settings and to learn how to configure QIIME, see here:
 http://qiime.org/install/qiime_config.html
 http://qiime.org/tutorials/parallel_qiime.html

                     blastmat_dir: None
      pick_otus_reference_seqs_fp: /usr/lib/python2.7/site-packages/qiime_default_reference/gg_13_8_otus/rep_set/97_otus.fasta
                         sc_queue: all.q
      topiaryexplorer_project_dir: None
     pynast_template_alignment_fp: /usr/lib/python2.7/site-packages/qiime_default_reference/gg_13_8_otus/rep_set_aligned/85_otus.pynast.fasta
                  cluster_jobs_fp: start_parallel_jobs.py
pynast_template_alignment_blastdb: None
assign_taxonomy_reference_seqs_fp: /usr/lib/python2.7/site-packages/qiime_default_reference/gg_13_8_otus/rep_set/97_otus.fasta
                     torque_queue: friendlyq
                    jobs_to_start: 1
                       slurm_time: None
            denoiser_min_per_core: 50
assign_taxonomy_id_to_taxonomy_fp: /usr/lib/python2.7/site-packages/qiime_default_reference/gg_13_8_otus/taxonomy/97_otu_taxonomy.txt
                         temp_dir: /tmp/
                     slurm_memory: None
                      slurm_queue: None
                      blastall_fp: blastall
                 seconds_to_sleep: 1

QIIME base install test results
===============================
.........
----------------------------------------------------------------------
Ran 9 tests in 0.026s

OK

다음으로는 도커 이미지도 다운로드해 두었다.

# docker pull quay.io/biocontainers/qiime:1.9.1--np112py27_1

pip를 이용하여 개별적으로 설치하느라 괜히 고생을 한 것은 아닌지 모르겠다.

2021년 5월 13일 업데이트

지금은 conda를 이용하여 쉽게 설치할 수 있으니 이런 고생을 할 필요가 없다. 2021년 5월에 QIIME 1.9.1이 웬 말이냐고 하겠지만, 아직 쓸모가 있는 것 같다.

댓글 없음: