Q: python (используя cutadapt в bash-скрипте на кластере): libpython3.7m.so.1.0: невозможно открыть общий объектный файл: такого файла или каталога нет - PullRequest
1 голос
/ 01 мая 2019

Я запускаю bash-скрипт на кластере, в котором используется программа cutadapt (которая использует python).

Перед запуском скрипта я загрузил python версии 3.7.0 и cutadapt

alias python=python3
module load python/3.7.0
pip3 install --user --upgrade cutadapt

, а затем отправьте его через qsub, но работа по-прежнему прерывается досрочно, и я получаю следующую ошибку:

/u/local/apps/python/3.7.0/bin/python3: 
error while loading shared libraries: libpython3.7m.so.1.0: 
cannot open shared object file: No such file or directory

Похоже, это не проблема с $LD_LIBRARY_PATH, поскольку echo $LD_LIBRARY_PATH показывает, что /u/local/apps/python/3.7.0/lib указан преимущественно в списке.

Также, ldd /u/local/apps/python/3.7.0/bin/python3 показывает, что libpython3.7m.so.1.0 найден и указывает на:

libpython3.7m.so.1.0 => 
/u/local/apps/python/3.7.0/lib/libpython3.7m.so.1.0 (0x00007f66e01f6000) 

Кроме того, вызов cutadapt таким же образом, как мой сценарий, работает правильно:

~/.local/bin/cutadapt

This is cutadapt 2.3 with Python 3.7.0
Command line parameters:

Run "cutadapt --help" to see command-line options.
See https://cutadapt.readthedocs.io/ for full documentation.

Мой коллега выполнил почти тот же код и сценарий, и у него не было проблем с сценарием, прерывающим / это сообщение об ошибке.

Заранее благодарим Вас за любые предложения относительно того, как я могу решить эту проблему!

Редактировать (Спасибо за отзыв!):

Это сценарий, который я отправил (который почти идентичен моему коллеге, за исключением другого домашнего каталога в кластере и другого выходного каталога):

#-- trim00s.sh --#
#!/bin/bash
#runs cutadapt on files 01-09

for i in {1..9}
do
fastq="Index0${i}.for.fq"
trimmedFastq="Index0${i}_trimmed.for.fq"
/u/home/e/evanderw/.local/bin/cutadapt -a GATCGGAAGAGCACACGTCTGAACTCCAGTCACNNNNNNATCTCGTATGCCGTCTTCTGCTTG -a "A{10}" -a "T{10}" -m 15 -q 30 -o ../../04_trimmed/lane_2/$trimmedFastq $fastq
done

После первого входа в кластер $LD_LIBRARY_PATH выглядит следующим образом (я предполагаю, что он автоматически устанавливается для этих библиотек по умолчанию для этого кластера?):

echo $LD_LIBRARY_PATH
/u/local/compilers/intel-cs/2013.0.028/mpi/intel64/lib:
/u/local/compilers/intel-cs/2013.0.028/itac/intel64/itac/slib_impi4:
/u/local/compilers/intel-cs/2013.0.028/composer_xe/compiler/lib/intel64:
/opt/intel/mic/coi/host-linux-release/lib:
/opt/intel/mic/myo/lib:
/u/local/compilers/intel-cs/2013.0.028/composer_xe/mpirt/bin/intel64:
/u/local/compilers/intel-cs/2013.0.028/composer_xe/ipp/lib/intel64:
/u/local/compilers/intel-cs/2013.0.028/composer_xe/mkl/lib/intel64:
/u/local/compilers/intel-cs/2013.0.028/composer_xe/tbb/lib/intel64

Но после изменения alias python=python3 и module load python/3.7.0 оно меняется на:

echo $LD_LIBRARY_PATH
/u/local/apps/python/3.7.0/lib:
/u/local/compilers/intel/17.0.1/compilers_and_libraries_2017.1.132/linux/mkl/lib/intel64:
/u/local/apps/xz/5.2.3/lib:
/u/local/apps/openssl/1.1.1/lib:
/u/local/apps/mpfr/3.1.5/gcc-4.9.3/lib:
/u/local/apps/hdf5/1.8.18/gcc-4.4.7-shared/lib:
/u/local/compilers/gcc/4.9.3/lib:
/u/local/compilers/gcc/4.9.3/lib64:
/u/local/compilers/intel-cs/2013.0.028/mpi/intel64/lib:
/u/local/compilers/intel-cs/2013.0.028/itac/intel64/itac/slib_impi4:
/u/local/compilers/intel-cs/2013.0.028/composer_xe/compiler/lib/intel64:
/opt/intel/mic/coi/host-linux-release/lib:
/opt/intel/mic/myo/lib:
/u/local/compilers/intel-cs/2013.0.028/composer_xe/mpirt/bin/intel64:
/u/local/compilers/intel-cs/2013.0.028/composer_xe/ipp/lib/intel64:
/u/local/compilers/intel-cs/2013.0.028/composer_xe/mkl/lib/intel64:
/u/local/compilers/intel-cs/2013.0.028/composer_xe/tbb/lib/intel64

1 Ответ

0 голосов
/ 02 мая 2019

Я обновил скрипт, чтобы убедиться, что shebang был первой строкой, а затем распечатал $LD_LIBRARY_PATH в виде текстового файла:

#!/bin/bash

#-- trim00s.sh --#
#runs cutadapt on files 01-09

echo $LD_LIBRARY_PATH >foo.txt

for i in {1..9}
do
fastq="Index0${i}.for.fq"
trimmedFastq="Index0${i}_trimmed.for.fq"
/u/home/e/evanderw/.local/bin/cutadapt -a GATCGGAAGAGCACACGTCTGAACTCCAGTCACNNNNNNATCTCGTATGCCGTCTTCTGCTTG -a "A{10}" -a "T{10}" -m 15 -q 30 -o ../../04_trimmed/lane_2/$trimmedFastq $fastq
done

Ошибка все еще сохраняется, и полученный foo.txt файл былполностью пустым, что означает, что $LD_LIBRARY_PATH был сброшен в пустое время, когда скрипт выполнялся через qsub.

Итак, я включил в свой скрипт строку, чтобы теперь добавить каталог для библиотеки, в которой мой код обнаружил проблемы с поиском, к моему $LD_LIBRARY_PATH, и это сработало!

#!/bin/bash

#-- trim00s.sh --#
#runs cutadapt on files 01-09

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/u/local/apps/python/3.7.0/lib


for i in {1..9}
do
fastq="Index0${i}.for.fq"
trimmedFastq="Index0${i}_trimmed.for.fq"
/u/home/e/evanderw/.local/bin/cutadapt -a GATCGGAAGAGCACACGTCTGAACTCCAGTCACNNNNNNATCTCGTATGCCGTCTTCTGCTTG -a "A{10}" -a "T{10}" -m 15 -q 30 -o ../../04_trimmed/lane_2/$trimmedFastq $fastq
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...