本家様 https://github.com/asarnow/pyem

「UCSF PyEM is a collection of Python modules and command-line utilities for electron microscopy of biological samples.」とある。

python3のコードのようで、pyenvとanacondaでPyEM実行環境を作ることにした。対象はCentOS 7です

あと、PyEMにある「recenter.py」(Recenter particles on the center-of-mass of corresponding 2D class-averages.)は、EMAN2のpythonモジュールを参照する。そのためpython3でEMAN2を作る必要があるみたい。

PyEM実行環境の作成

python3ベースな環境にするので、まず pyenv の設定
「/apps/pyenv」を基点に仮想環境を作ってます

[root@c7 ~]# git clone https://github.com/yyuu/pyenv.git /apps/pyenv
[root@c7 ~]# export PYENV_ROOT=/apps/pyenv
[root@c7 ~]# export PATH=$PYENV_ROOT/bin:$PATH
[root@c7 ~]# eval "$(pyenv init - --no-rehash)"
 
[root@c7 ~]# pyenv install anaconda3-5.3.1
[root@c7 ~]# pyenv global anaconda3-5.3.1
 
[root@c7 ~]# export PATH=$PYENV_ROOT/versions/anaconda3-5.3.1/bin/:$PATH

作るpython3環境は python3.6 を使うようにします。仮想環境名ですが単純に「PyEM」とします

[root@c7 ~]# conda create -n PyEM python=3.6

追加のパッケージをインストール

「PyEM」仮想環境に追加のパッケージをインストールします。
まず仮想環境に移ります。

[root@c7 ~]# source activate PyEM
(PyEM) [root@c7 ~]#

追加パッケージの調べ方というか、雑ですが基本的にはPyEMソースをダウンロードして、
それをコンパイル・実行してみてエラーが出たらそのパッケージをインストールって流れです。

(PyEM) [root@c7 ~]# cd /apps
(PyEM) [root@c7 apps]# git clone https://github.com/asarnow/pyem
(PyEM) [root@c7 apps]# cd pyem
(PyEM) [root@c7 pyem]#

コンパイルしてみる

(PyEM) [root@c7 pyem]# python -V
Python 3.6.9 :: Anaconda, Inc.
(PyEM) [root@c7 pyem]# python setup.py build
  :
(PyEM) [root@c7 pyem]#

なんかスムーズにできたみたい。
っでここで「python setup.py install」とすると関連のパッケージを取ってきてくれるのだが、なぜかpython2ベースになる?

っで次に「angdist.py」を実行してみる

(PyEM) [root@c7 pyem]# 
 
(PyEM) [root@c7 pyem]# ./angdist.py
Traceback (most recent call last):
  File "./angdist.py", line 25, in <module>
    import matplotlib.pyplot as plt
ModuleNotFoundError: No module named 'matplotlib'
 
(PyEM) [root@c7 pyem]#

matplotlibが足りないみたい。「conda install matplotlib」として追加。そして再度「angdist.py」を動かしてみる。
っと繰り返す。
結局

conda install matplotlib
conda install seaborn
conda install numba
conda install natsort
conda install -c conda-forge pyfftw
conda install -c conda-forge pathos
conda install -c conda-forge healpy

をインストールすればいける。

ただ「projection_subtraction.py」は下記修正を行う必要があった

--- projection_subtraction.py.orig      2019-12-14 08:25:48.438481615 +0900
+++ projection_subtraction.py   2019-12-14 08:26:19.789084818 +0900
@@ -288,7 +288,7 @@
 if __name__ == "__main__":
     import argparse
 
-    parser = argparse.ArgumentParser(version="projection_subtraction.py 2.1b")
+    parser = argparse.ArgumentParser()
     parser.add_argument("input", type=str,
                         help="STAR file with original particles")
     parser.add_argument("output", type=str,

加えて結局エラーにはなるのだが、「recenter.py」も一部修正した

--- recenter.py.orig    2019-12-14 08:28:11.438671694 +0900
+++ recenter.py 2019-12-14 08:28:22.780528145 +0900
@@ -21,7 +21,7 @@
 import logging
 import sys
 import numpy as np
-from star import parse_star, write_star
+from pyem.star import parse_star, write_star
 from EMAN2 import EMData, Vec3f, Transform
 

この修正をして「recenter.py」を実行すると下記のようなメッセージが表示される

(PyEM) [root@c7 pyem]# ./recenter.py
Traceback (most recent call last):
  File "./recenter.py", line 25, in <module>
    from EMAN2 import EMData, Vec3f, Transform
ModuleNotFoundError: No module named 'EMAN2'
 
(PyEM) [root@c7 pyem]#

なので、EMAN2のpython3ライブラリを入れてみた

EMAN2をpython3ベースで作る

「recenter.py」スクリプトはEMAN2のpython3ライブラリを参照するみたい。
っが、EMAN2のパッケージ「eman2.3.linux64.sh」はpython2で作られているためか、参照できないみたい。
「PyEM」パッケージの「activate」を使えば簡単にいけるのかもしれないが、、この辺は分からない

まずはEMAN2のソースを取得します
*PyEM仮想環境のままです

(PyEM) [root@c7 ~]# cd /apps
(PyEM) [root@c7 apps]# git clone https://github.com/cryoem/eman2
 
(PyEM) [root@c7 apps]# cd eman2
(PyEM) [root@c7 eman2]# git branch                 (gitはmasterを使います)
* master
 
(PyEM) [root@c7 eman2]# mkdir build && cd build    (buildする場所を作って、そこに移ります)
(PyEM) [root@c7 build]#
(PyEM) [root@c7 build]# cmake ..
CMake Error at CMakeLists.txt:1 (CMAKE_MINIMUM_REQUIRED):
  CMake 3.14 or higher is required.  You are running version 2.8.12.2    (CentOS7のcmakeは2.8.12.2でこれでは無理)
 
 
-- Configuring incomplete, errors occurred!
 
(cmake3のインストール)
(PyEM) [root@c7 build]# yum install epel-release
(PyEM) [root@c7 build]# yum installl cmake3               (epelリポジトリで配布しているcmake3をインストールします)
(PyEM) [root@c7 build]# 
(PyEM) [root@c7 build]# cmake3 --version                  (cmake3のバージョン確認)
cmake3 version 3.14.6
 
CMake suite maintained and supported by Kitware (kitware.com/cmake).
 
(PyEM) [root@c7 build]# cmake3 ..
  :
  Unable to find the requested Boost libraries.
  :

と今度はboostパッケージが必要になった。これはCentOS 7提供の「boost」ではboost_numpyらがなくて駄目。代わりにepelの「boost169」を使います。

(yumインストールはPyEM仮想環境でなくてもOK)
(PyEM) [root@c7 build]# yum install boost169-devel
 
(必須)
(PyEM) [root@c7 build]# (cd /usr/lib64/boost169 ; ln -s libboost_numpy36.so libboost_numpy3.so ; ln -s libboost_python36.so libboost_python3.so )

ほかにも

(PyEM) [root@c7 build]# yum install gsl-devel
 
(PyEM) [root@c7 build]# conda install -c conda-forge hdf5
(PyEM) [root@c7 build]# conda install fftw
(PyEM) [root@c7 build]# conda install -c cryoem ftgl

を入れる。

そして、cmake3でconfigure

(PyEM) [root@c7 build]# BOOST_LIBRARYDIR=/usr/lib64/boost169 BOOST_INCLUDEDIR=/usr/include/boost169 \
                            cmake3 -DCMAKE_CXX_FLAGS=-I/usr/include/boost169 ..

これでcmakeは通るかと思います
っでmake

(PyEM) [root@c7 build]# make
 :
(PyEM) [root@c7 build]# make install

これでPyEM仮想環境のtopにインストールされます。
ここでは「/apps/pyenv/versions/anaconda3-5.3.1/envs/PyEM/bin」にeman2のバイナリーが入ります。

っで、ようやく本題のPyEMの「recenter.py」を動かしてみる

(PyEM) [root@c7 build]# cd /apps/pyem
 
(PyEM) [root@c7 pyem]# ./recenter.py
 :
 :
ModuleNotFoundError: No module named 'past'
(PyEM) [root@c7 pyem]#

っが、まだまだ不足しているようで、追加の下記を加えて

(PyEM) [root@c7 pyem]# conda install future
(PyEM) [root@c7 pyem]# conda install -c conda-forge bsddb3

ようやく実行できた

(PyEM) [root@c7 pyem]# ./recenter.py
usage: recenter.py [-h] [--class-2d CLASS_2D] [--class-3d CLASS_3D]
                   [--zero-origin ZERO_ORIGIN]
                   input output
recenter.py: error: the following arguments are required: input, output
(PyEM) [root@c7 pyem]#
(PyEM) [root@c7 pyem]# ./recenter.py -h
usage: recenter.py [-h] [--class-2d CLASS_2D] [--class-3d CLASS_3D]
                   [--zero-origin ZERO_ORIGIN]
                   input output
 
positional arguments:
  input                 Input .star file
  output                Output .star file
 
optional arguments:
  -h, --help            show this help message and exit
  --class-2d CLASS_2D   2D class images for recentering (pass glob in quotes
                        for multiple files)
  --class-3d CLASS_3D   3D class images for recentering (pass glob in quotes
                        for multiple files)
  --zero-origin ZERO_ORIGIN
                        Subtract particle origin from particle coordinates in
                        output
(PyEM) [root@c7 pyem]#

メモ

recenter.py」はそのままでは動かないみたい。下記修正が必要

diff --git a/recenter.py b/recenter.py
index d152032..0ac50b0 100755
--- a/recenter.py
+++ b/recenter.py
@@ -21,8 +21,8 @@ import glob
 import logging
 import sys
 import numpy as np
-from star import parse_star, write_star
-from EMAN2 import EMData, Vec3f, Transform
+from pyem.star import parse_star, write_star
+from EMAN2 import EMData, Vec3f, Vec2f, Transform
 
 
 def main(args):

トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2019-12-18 (水) 06:36:27 (32d)