NCBI blast+ из командной строки не распознает команду blastn

Я пытался сгенерировать зонды HCR, используя скрипт, предоставленный здесь, который должен быть довольно простым и удобным для пользователя методом, и я хотел бы подготовить его для использования во всей лаборатории. У меня есть некоторый опыт работы с python, но я никогда раньше не использовал NCBI blast+.

Я столкнулся с проблемой при попытке взорвать сгенерированные зонды.. По какой-то причине это ошибка в команде 'cline()'. Я установил (pip) и импортировал пакет cline, но это бесполезно. Есть идеи, в чем проблема?

Мне не нужно было указывать местоположение исполняемого файла NCBI Blast+, который, как я читал на других страницах, может решить эту проблему, но я не знаю, как интегрировать его в такой сложный код. В настоящее время он установлен на моем C :/ вбиваем файлы программы..

Любые предложения более чем приветствуются!

Я попытался установить pip cline (который не запрашивается) и указать путь к исполняемому файлу следующим образом:

blastn = r"C:\Program Files\NCBI\blast-BLAST_VERSION+\bin\blastn.exe"

однако это не мой собственный код, и он довольно сложный, поэтому я не знаю, как правильно его интегрировать. Я читал подобные проблемы, такие как это, где это было исправлено после указания пути к blastn.exe, но я не смог этого сделать.

К вашему сведению, я на Windows, использую блокнот Jupyter через анаконду

ApplicationError                          Traceback (most recent call last)
Cell In[1], line 16
     14 strt = start()
     15 name,fullseq,amplifier,pause,choose,polyAT,polyCG,BlastProbes,db,dropout,show,report,maxprobe,numbr = strt[0],strt[1],strt[2],strt[3],strt[4],strt[5],strt[6],strt[7],strt[8],strt[9],strt[10],strt[11],strt[12],strt[13]
---> 16 maker(name,fullseq,amplifier,pause,choose,polyAT,polyCG,BlastProbes,db,dropout,show,report,maxprobe,numbr)

File c:\Users\wilke\OneDrive - Hubrecht Institute\Jupyter notebooks\insitu_probe_generator-v.0.3.2\maker37cb.py:411, in maker(name, fullseq, amplifier, pause, choose, polyAT, polyCG, BlastProbes, db, dropout, show, report, maxprobe, numbr)
    408 ## Probe BLAST setup and execution from FASTA file prepared in previous step
    410     cline = bn(query = str(name)+"PrelimProbes.fa", subject = db, outfmt = 6, task = 'blastn-short') #this uses biopython's blastn formatting function and creates a commandline compatible command 
--> 411     stdout, stderr = cline() #cline() calls the string as a command and passes it to the command line, outputting the blast results to one variable and errors to the other
    413     ## From results of blast creating a numpy array (and Pandas database)
    414     dt = [(np.unicode_,8),(np.unicode_,40),(np.int32),(np.int32),(np.int32),(np.int32),(np.int32),(np.int32),(np.int32),(np.int32),(np.float),(np.float)]

File ~\anaconda3\envs\hcr\lib\site-packages\Bio\Application\__init__.py:574, in AbstractCommandline.__call__(self, stdin, stdout, stderr, cwd, env)
    571     stderr_arg.close()
    573 if return_code:
--> 574     raise ApplicationError(return_code, str(self), stdout_str, stderr_str)
    575 return stdout_str, stderr_str

ApplicationError: Non-zero return code 1 from 'blastn -outfmt 6 -query tbx18PrelimProbes.fa -subject "C:\\Users\\wilke\\OneDrive - Hubrecht Institute\\Jupyter notebooks\\insitu_probe_generator-v.0.3.2\\fastas\\Tbx18-cDNA.fa" -task blastn-short', message "'blastn' is not recognized as an internal or external command,"

скриншот ошибки

текущий код:

from start import start
from maker37cb import maker
import pandas as pd
from Bio.Seq import Seq
from Bio.Blast.Applications import NcbiblastnCommandline
import io
import numpy as np
import pandas as pd
import cline

blastn = r"C:\Program Files\NCBI\blast-BLAST_VERSION+\bin\blastn.exe"

    
strt = start()
name,fullseq,amplifier,pause,choose,polyAT,polyCG,BlastProbes,db,dropout,show,report,maxprobe,numbr = strt[0],strt[1],strt[2],strt[3],strt[4],strt[5],strt[6],strt[7],strt[8],strt[9],strt[10],strt[11],strt[12],strt[13]
maker(name,fullseq,amplifier,pause,choose,polyAT,polyCG,BlastProbes,db,dropout,show,report,maxprobe,numbr)

обновлять :

Я попытался изменить исходный код, включив в него путь к исполняемому файлу, как описано в упомянутом выше посте biostars.. по-прежнему не повезло, теперь путь не распознается.. по-прежнему возникает ошибка

Спасибо @Wayne, возможно, ты прав. Было бы очень хорошо, если бы это сработало, сэкономило бы хотя бы немного времени, не переключаясь ... но, увы, если разработчики не ответят на мой запрос github, не повезло.

WilkeM 05.04.2023 16:54

Я немного смущен вашим кодом, blastn = r"C:\Program Files\NCBI\blast-BLAST_VERSION+\bin\blastn.exe". Вы действительно выполнили шаги по установке программного обеспечения BLAST+ на свой компьютер, см. здесь? Если так, то это не должно быть путем? Это должен быть очень конкретный путь.

Wayne 05.04.2023 17:15

Привет, Уэйн, да, я установил программное обеспечение, и папка bin содержит все исполняемые файлы для различных типов взрывных работ (насколько мне известно... я впервые использую это программное обеспечение). Я использовал этот пост для вдохновения >biostars.org/p/450634< Как этот путь не специфичен? Здесь также установлены все мои другие программы, и установщик создал подпапку NCBI.

WilkeM 05.04.2023 17:18

Что произойдет, если вы попытаетесь запустить внутри Jupyter !blastn -help?

Wayne 05.04.2023 17:26

Это дает мне целую кучу вариантов использования, входных параметров и т. д. (это было до вашего второго поста.. я думаю, это уже работает?)

WilkeM 05.04.2023 17:37

О, тогда вы установили его правильно, и у Jupyter есть доступ. Так что blastn должен работать изнутри кода. Хм....

Wayne 05.04.2023 17:38

Я предполагаю, что проблема заключается не в самой функции blastn, а в том, как она вызывается в исходном коде? если это так, мне придется обратиться за помощью к разработчикам .. :) Однако спасибо за устранение неполадок со мной, @wayne!

WilkeM 05.04.2023 17:39

Я не уверен, что это такое на данный момент. Я все еще пытаюсь диагностировать это немного больше. Или придумать обходной путь.

Wayne 05.04.2023 17:54

Так что у меня просто все получилось. Мне нужно было изменить строку кода, но это не связано с тем, что вы видите. Мне пришлось изменить конец строки 414 в maker37cb.py, чтобы читать ...(np.int32),(np.float64),(np.float64)] Я думаю, что ваша проблема может заключаться в чрезмерном усложнении вещей, которые вы вводите в форму. Я настоятельно рекомендую вам скопировать Tbx18-cDNA.fa из вашего OneDrive и просто поместить его в тот же каталог, что и блокнот, в котором вы работаете. Затем, когда форма спросит, где использовать, поместите его в одинарные кавычки вокруг него как 'Tbx18-cDNA.fa'.

Wayne 05.04.2023 18:13

Привет, Уэйн. На самом деле я запускал свои ноутбуки со своего onedrive .. :-) Однако он установлен как локальная папка под моей учетной записью пользователя. Файл fasta также находится там. Однако, если я попробую ваше предложение, появится ошибка, что файл недоступен.

WilkeM 06.04.2023 08:29

Пробелы и необычные элементы в путях создают проблемы при работе, и я видел, где элементы на самом деле не там, где вы действительно думаете, что они имеют дело с OneDrive. Это частая причина проблем на дискуссионном форуме сообщества Jupyter. Однако нет никакого смысла в том, что если вы скопируете файл и поместите его рядом с блокнотом, то он его не увидит. Можете ли вы перечислить файлы, которые находятся рядом с блокнотом, запустив ls или dir в блокноте? Также запустите pwd, чтобы увидеть, действительно ли текущий рабочий каталог находится там, где вы подозреваете. Если это не так, вы используете %cd, чтобы изменить его.

Wayne 06.04.2023 17:44

Спасибо, Уэйн, оказалось, что проблема была в этом... обратите внимание: не запускайте скрипты с onedrive, особенно если в качестве входных данных требуются другие файлы... Работает отлично прямо после новой загрузки кода github на мой C: / водить машину

WilkeM 11.04.2023 09:43
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
12
91
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Наличие места, где он работает, может помочь вам разобраться, с чем ваши проблемы связаны с его локальным запуском.

(Как отмечалось в моих комментариях, моя большая проблема заключается в том, что попытка указать путь к последовательности для взрыва, в которой есть пробелы [или она слишком сложна], вызывает проблемы, которые проявляются таким образом, что на самом деле не указывают вам на В этом примере я помещаю последовательность рядом с записной книжкой и сценарием в файловой иерархии и ссылаюсь на нее просто.)

Вот как мне удалось успешно запустить код:

  1. Я пошел сюда и запустил сеанс через MyBinder, где все необходимые зависимости уже установлены. Ярлык для надежного запуска на данный момент: нажмите здесь.

  2. Когда сессия началась, я открыл новую ячейку в списке «Доступные ноутбуки» и выполнил команду !git clone https://github.com/rwnull/insitu_probe_generator.git. Это получает программное обеспечение «insitu_probe_generator».

  3. Затем я щелкнул правой кнопкой мыши логотип Jupyter в левом верхнем углу над открывающейся записной книжкой и выбрал «Открыть ссылку в новом окне», чтобы открыть интерфейс JupyterLab в том же сеансе. (ДОПОЛНИТЕЛЬНО: чтобы упростить вам задачу, вы можете при желании прямо сейчас щелкнуть плитку с надписью «терминал» на панели запуска с правой стороны, а когда она появится, введите любую команду, например ls. Это сохранит сеанс активен дольше, даже если время ожидания ядра вашего ноутбука истекает через 10 минут бездействия.)

  4. Затем на панели навигации по файлам с левой стороны. В JupyterLab я дважды щелкаю папку «insitu_probe_generator» в списке, чтобы перейти в каталог «insitu_probe_generator». А затем в этом каталоге я открыл новую записную книжку и запустил в ней команду !curl -O http://sgd-archive.yeastgenome.org/sequence/S288C_reference/chromosomes/fasta/chrmt.fsa, которая оказалась первой ячейкой в ​​первой записной книжке, указанной как «доступные записные книжки». Эта команда получает chrmt.fsa. Я использую его как свой файл для запуска BLAST против зондов. (Нет, в JupyterLab вы можете перетаскивать с локального компьютера на панель навигации по файлам слева. Так что позже вы сможете протестировать свои собственные файлы последовательностей.)

  5. Затем я открыл maker37cb.py и отредактировал строку 414, чтобы прочитать следующее:

dt = [(np.unicode_,8),(np.unicode_,40),(np.int32),(np.int32),(np.int32),(np.int32),(np.int32),(np.int32),(np.int32),(np.int32),(np.float64),(np.float64)]

Убедитесь, что я нажал «Сохранить», чтобы сохранить отредактированную версию сценария. (Вы должны сделать это перед выполнением следующего шага. Если вам случится запустить блокнот первым в соответствии со следующим шагом, убедитесь, что вы перезапустили ядро ​​​​после редактирования сценария, иначе изменения не вступят в силу.)

  1. Затем я дважды щелкнул «UserInterface_v0.3.2.ipynb» в списке, открыл его и начал запускать ячейку номер 1 блокнота.
    По возникшим вопросам, вот так:
    Имя гена: eGFP

    В качестве последовательности смысловой цепи «вашей кДНК» я использовал следующее без какой-либо особой причины, кроме как для того, чтобы использовать то, что я получил от chrmt.fsa:

TAAATTAATAAAATAATAATACCATTTATATATTCCATTATATATATATATTTAATAAAAATAATAATATCATTTATATATTTTATTATATATTATATATATTTTATATAAAATAATAATAATAAATTTATATTTTTATATATTATTATTAAATAATAATAATATAAATAACTCCTTCGGGGTTCGGTCCCCACGGGTCCCTCACTCCTTCTTAAGAATAAAAAGGGGTTCGGTCCCCCTCCCGTTAGTACACGGGAGGGGGTCTCTCACTCCTTCTTAAAAAATAAAAAGGTGGAAGGACTAATATAATTTTAAATAATAATTAATACTTTAATAATAATTTGTATTTCTTTATTATTAATATATTAAATATAATAATAATTAATATAATTACAATATATTAATATTATCAAATATTAATAAATATACTTTTTTATATAATTTATTTATTTATTTATTTTTTTTTTATTAAACTAATTA

усилитель: B1
Сколько баз с 5' конца: 40
максимальная допустимая длина для гомополимеров полиА или полиТ: 6
максимальная допустимая длина для гомополимеров полиС или полиG: 6
Вы хотите выбрать параметры программы? Y
в состоянии выбрать между потенциальными самыми длинными наборами зондов? Н
BLAST потенциально проверяет файл FASTA? Y
Где находится файл FASTA: 'chrmt.fsa' <== с одинарными кавычками!!
отображать подробные результаты BLAST: Y
устраните зонды, которые появляются в выходных данных BLAST низкого качества [sic]: Y
отображать выбранные параметры: Y
ограничить количество сделанных зондов: N

Потом побежит. Результаты BLAST показаны под заголовком «Это подробный обзор зондов с хорошим совпадением».


Я отмечаю, что ввод неправильной ссылки на файл последовательности для использования в файле BLAST приводит к (неправильный файл в этом случае 'C:/users/user fake/***.fasta'):

ApplicationError: Non-zero return code 1 from 'blastn -outfmt 6 -query eGFPPrelimProbes.fa -subject "\'C:/users/user fake/***.fasta\'" -task blastn-short', message 'Command line argument error: Argument "subject". File is not accessible:  `\'C:/users/user fake/***.fasta\'\''

Это не та ошибка, о которой вы сообщали, но возможно ли, что вы исправили ее позже или что Windows сообщает о других вещах, чем Linux, о том, что путь к файлу последовательности работает неправильно?



Обратите внимание, что когда вы запустите его выше, вы увидите несколько предупреждений о будущем устаревании, например это:

/home/jovyan/insitu_probe_generator/maker37cb.py:396: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.
  remove = remove.append({'pos1' : newlist[a][0], 'seq' : str(fullseq[newlist[a][0]:(newlist[a][0]+25)]+"nn"+fullseq[(newlist[a][0]+27):newlist[a][1]]), 'pos2' : newlist[a][1], 'fasta':nm, 'num':a}

На данный момент код работает, если Pandas начнет что-то применять, в будущем код выйдет из строя при запуске с новой версией Pandas.
Это одна из больших проблем с использованием заброшенного ПО. Кроме того, разработчики не указали, какие версии вещей работали на момент написания кода. Если это было включено, то версии для установки в среде для его запуска могут быть закреплены за ними, и все должно работать так же, как и на момент написания кода.

В этом случае это должно быть простое исправление, подобное тому, что я уже встроил для np.float64 использования. Но вы можете видеть, как такие вещи могут накапливаться с течением времени. Было бы предпочтительнее, если бы разработчики периодически обновляли его по мере адаптации подходов и методов в зависимостях, чтобы поддерживать код в актуальном состоянии.

Ответ принят как подходящий

Оказывается, запуск скрипта из моего OneDrive создал эту проблему. Новая установка скрипта github на мой диск C:/ с самого начала прошла нормально.

Оставьте это на случай, если кто-то еще может столкнуться с подобной проблемой. Но усиливая совет @Wayne в комментариях, не запускайте вещи из OneDrive .. :)

Пробелы и необычные элементы в путях создают проблемы при работе, и я видел, где элементы на самом деле не там, где вы действительно думаете, что они имеют дело с OneDrive. Это частая причина проблем на дискуссионном форуме сообщества Jupyter. Однако нет никакого смысла в том, что если вы скопируете файл и поместите его рядом с блокнотом, то он его не увидит. Можете ли вы перечислить файлы, находящиеся рядом с записной книжкой, запустив ls или dir в записной книжке? Также запустите pwd, чтобы проверить, действительно ли текущий рабочий каталог находится там, где вы подозреваете. Если это не так, вы используете %cd, чтобы изменить его. - Уэйн

Другие вопросы по теме