Ошибки командной строки NCBIblastP

Я пытаюсь автоматизировать вывод из нескольких файлов в каталоге. Переменные здесь жестко закодированы, но позже будут определены пользователем. Мои файлы будут изменены с помощью цикла, но у меня возникают проблемы с запуском NcbiblastpCommandline для файлов из Python. Стремление запускать blast локально с вводом нескольких пакетов больших файлов fasta, поэтому blast будет последовательно запускать каждый пакетный файл, выводить в tsv, где я анализирую данные и передаю локальное выравнивание кластера.

Input_file="minifasta.fasta"
data="uniprot_database"
E_Value_Thresh=1e-10
counter=1
Filename2= 'Batch'+str(counter)
from Bio.Blast.Applications import NcbiblastpCommandline
blast_output_file='blastout.tsv'
NcbiblastpCommandline.outfile=Filename2
from Bio.Blast.Applications import NcbiblastpCommandline
cline = NcbiblastpCommandline(query=Input_file, db=data,outfmt=6, 
out=blast_output_file, evalue= E_Value_Thresh)
print(cline)
stdt, stdr= cline()

Я продолжаю получать сообщение об ошибке «Объект NcbiblastpCommandline» не является итерируемым. и меня направляют на строку stdt, stdr, но без stdt, stdr появляется другая ошибка, говорящая, что команда не распознана, и сообщения об ошибках, направляющие на stdout_str, stderr_str. Я не могу найти актуальные примеры использования NcbiblastpCommandline в python 3, чтобы помочь мне.

Полная ошибка, которую я получаю:

ApplicationError: Non-zero return code 127 from 'blastp -out blastout.tsv -outfmt 6 -query minifasta.fasta -db uniprot_database -evalue 1e-10', message '/bin/sh: blastp: command not found'.

  File "/Users/me/anaconda3/lib/python3.6/site-packages/Bio/Application/__init__.py", line 523, in __call__
    stdout_str, stderr_str)

person Learning2programme    schedule 27.04.2018    source источник
comment
Добро пожаловать в Stackoverflow. Чтобы вам было легче помочь, не могли бы вы (сейчас и в будущем) указать полную ошибку, которую вы получаете. Также, пожалуйста, добавьте, как выглядит ваш ожидаемый ввод и какой результат вы хотите сгенерировать, и если вы хотите запустить локальный или удаленный взрыв.   -  person voiDnyx    schedule 27.04.2018
comment
Нет проблем, изменяю свой вопрос сейчас.   -  person Learning2programme    schedule 27.04.2018
comment
/bin/sh: blastp: command not found'. может означать, что у вас либо не установлен blastp, либо он не найден в вашей переменной PATH. Можете ли вы запустить blastp вручную и на какой ОС вы работаете?   -  person voiDnyx    schedule 27.04.2018
comment
blastp работает в командной строке, и он находится в том же каталоге, что и мой .py и все файлы ввода/вывода. Я на OSX, поэтому мне интересно, есть ли способ реализовать ./ как я могу сделать в командной строке, чтобы blastp выполнялся в том же каталоге   -  person Learning2programme    schedule 27.04.2018
comment
Просто для полноты картины, можете ли вы выполнить команду echo $PATH в терминале и убедиться, что местоположение вашего blastp указано в списке? Если нет, попробуйте добавить. (osxdaily.com/2014/08/ 14/add-new-path-to-path-command-line например показывает способ сделать это)   -  person voiDnyx    schedule 27.04.2018


Ответы (2)


Сначала запустите which blastp, чтобы найти полный путь к blastp, и передайте его в качестве аргумента NcbiblastpCommandline.

from Bio.Blast.Applications import NcbiblastpCommandline
blastp_path = '/path/to/blastp'
cline = NcbiblastpCommandline(cmd=blastp_path, query=Input_file, db=data,outfmt=6, 
out=blast_output_file, evalue= E_Value_Thresh)

Если вы сейчас сделаете print(cline), он должен распечатать полную команду, которая будет запущена. Дважды проверьте, что это работает, скопировав/вставив этот вывод и запустив его из командной строки.

person BioGeek    schedule 27.04.2018
comment
Это работает! Круто, рад, что мне не пришлось прибегать к использованию OS.command, и я нахожу этот способ более гибким. - person Learning2programme; 29.04.2018
comment
Пожалуйста, рад помочь. Если вы считаете, что этот ответ решил вашу проблему, отметьте его как «принято», нажав зеленую галочку. - person BioGeek; 29.04.2018

Я тоже только что столкнулся с этой проблемой. Я исправил это, добавив путь к командам NCBI blast в свой путь и повторно открыв python. Чтобы добавить путь для взрыва в $PATH, сделайте следующее: export PATH=/path/to/blast:$PATH. Вот несколько команд, которые могут решить проблему, если вы не знаете, как все это сделать:

# Find where it is installed and put it in a variable:
# 'command -v blastp' and  'which blastp' will give the same results
path_to_blast=$(dirname $(command -v blastp))
export PATH=$path_to_blast:$PATH

В противном случае вы можете добавить его в свой ~/.bashrc:

# Put path to executables of blast in a variable
path_to_blast=$(dirname $(command -v blastp))
# Append a comment to the ~/.bashrc
echo -e '\n# Add path to blast executable' >> ~/.bashrc
# Add the export command to update the $PATH.
# Double quotes will allow the inerpretation of the $path_to_blast
echo "export PATH=$path_to_blast:$PATH" >> ~/.bashrc
# Source the ~/.bashrc to update your session
source ~/.bashrc

В обоих случаях повторно откройте python. Это будет работать без прав администратора.

person 3nrique0    schedule 14.04.2020