🔬 成功在 Conda Python 2.7 環境中安裝 Clipper(eCLIP peak caller)
本文記錄了如何在無 root 權限下使用 Conda 環境,解決依賴、構建擴展模塊并成功安裝運行
clipper
的詳細流程。適用于再現 eCLIP 分析流程時遇到 clipper 安裝失敗的情況。
🧱 環境準備
? 創建 Python 2.7 環境
conda create -n clipper_py27 python=2.7
conda activate clipper_py27
📦 安裝依賴
? 安裝 GCC 編譯器(適用于無 root 的 Conda 環境)
conda install -c conda-forge gcc_linux-64=7 gxx_linux-64=7
? 安裝編譯依賴
conda install cython numpy pysam pybedtools
有些模塊的最新版本不支持 Python 2.7,請手動指定版本:
conda install "numpy<=1.16" "pysam<=0.15.3" "pybedtools<=0.8.1" -c bioconda -c conda-forge
? 下載 clipper 源碼并切換到歷史兼容版本
git clone https://github.com/YeoLab/clipper.git
cd clipper
git checkout 5d865bb17b2bc6787b4c382bc857119ae917ad59
這個版本兼容 Python 2.7,且沒有使用過高版本的 scikit-learn
, matplotlib
, scipy
等依賴。
?? 編譯 Cython 和 C++ 模塊
Clipper 依賴兩個擴展模塊:readsToWiggle
和 peaks
,需要先構建:
python setup.py build_ext --inplace
如果遇到 crypt.h: No such file or directory
錯誤,需安裝 libxcrypt-dev
(若無 sudo 權限,可聯系管理員,或在支持的 HPC 環境中使用系統模塊加載)。
🛠 安裝 clipper 到 Conda 環境中(避免 egg)
為避免 .egg 導入失敗,使用標準方式安裝:
其中setup中一些依賴包的版本應該如下:
##setup.py
install_requires = ['setuptools', 'pysam >= 0.15.3','numpy <= 1.16.6 ','scipy<=1.2.1','matplotlib<=2.2.5','pybedtools <= 0.7.10','scikit-learn <=0.20.4','HTSeq<=0.6.1'],
python setup.py install --single-version-externally-managed --record record.txt
🧩 修復擴展模塊無法找到的問題
有時安裝完成后運行 clipper
仍報錯:
ImportError: No module named peaks
雖然 clipper/src/peaks.so
已編譯成功,但 Python 可能無法找到它。解決方法如下:
? 手動創建模塊路徑并復制 .so
文件:
mkdir -p $CONDA_PREFIX/lib/python2.7/site-packages/clipper/src/
cp ./clipper/src/peaks.so $CONDA_PREFIX/lib/python2.7/site-packages/clipper/src/
確認成功導入:
python -c "import clipper.src.peaks; print(clipper.src.peaks)"
? 最終測試 clipper 是否可用
clipper --help
成功輸出幫助信息:
usage: clipper [-h] [-b BAM_FILE] [-s STRANDEDNESS] ...
🎉 至此,Clipper 已成功在 Python 2.7 Conda 環境中安裝并可正常運行!
💡 小貼士
- 避免使用
setup.py install
安裝為.egg
格式,否則 Python 2.7 下容易出現ImportError
。 - 若你在服務器中沒有 root 權限,建議提前準備 GCC 環境(如
gcc_linux-64
),并避免使用 pip 安裝依賴。 - 建議將
clipper
安裝在~/eCLIP/bin/clipper
目錄中并作為模塊管理。