Использование PhyML в BioPython Phylo - PullRequest
0 голосов
/ 08 сентября 2018

Недавно я пытался использовать максимальное правдоподобие для создания деревьев из файла выравнивания, но у меня возникли проблемы при соблюдении официальной документации BioPython:

cmd = PhymlCommandline(input='data/random.phy')
out_log, err_log = cmd()

Я заменил путь на путь к моему собственному файлу в расслабленном формате. Чтение моего файла с AlignIO работало, поэтому путь не должен быть проблемой.

Нужно ли устанавливать PhyML и каким-либо образом связывать его с установкой BioPython?

К сожалению, в Документации об этом очень мало.

Я пользуюсь ноутбуком Juypter через Anaconda в Windows.

Ошибка:

FileNotFoundError                         Traceback (most recent call last)
<ipython-input-4-437a0bc7f21e> in <module>()
  4 cmd = PhymlCommandline(input='C/Users/Nicolas/Documents/Uni/ProjektHerlyn/random.phy', cmd='phyml')
  5 #out_log, err_log = cmd()
----> 6 cmd()

~\Anaconda3\lib\site-packages\Bio\Application\__init__.py in __call__(self, stdin, stdout, stderr, cwd, env)
505                                          universal_newlines=True,
506                                          cwd=cwd, env=env,
--> 507                                          shell=use_shell)
508         # Use .communicate as can get deadlocks with .wait(), see Bug 2804
509         stdout_str, stderr_str = child_process.communicate(stdin)

~\Anaconda3\lib\subprocess.py in __init__(self, args, bufsize, executable, stdin, stdout, stderr, preexec_fn, close_fds, shell, cwd, env, universal_newlines, startupinfo, creationflags, restore_signals, start_new_session, pass_fds, encoding, errors)
707                                 c2pread, c2pwrite,
708                                 errread, errwrite,
--> 709                                 restore_signals, start_new_session)
710         except:
711             # Cleanup if the child failed starting.

~\Anaconda3\lib\subprocess.py in _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, unused_restore_signals, unused_start_new_session)
995                                          env,
996                                          os.fspath(cwd) if cwd is not None else None,
--> 997                                          startupinfo)
998             finally:
999                 # Child is launched. Close the parent's copy of those pipe

FileNotFoundError: [WinError 2] Das System kann die angegebene Datei nicht finden

-> Английский: [WinError 2] Системе не удается найти указанный файл

1 Ответ

0 голосов
/ 09 сентября 2018

Краткий ответ

  • Загрузите PhyML здесь: http://www.atgc -montpellier.fr / phyml / download.php
  • Распакуйте соответствующий исполняемый файл для вашей ОС на компьютер
  • Добавьте cmd=/your/path/PhyML-3.1_win32.exe' к вашему вызову PhymlCommandline, например,

    cmd = PhymlCommandline(cmd='c:/home/users/nicolas/PhyML-3.1_win32.exe', input='data/random.phy')
    
  • В качестве альтернативы вы можете добавить путь к исполняемому файлу в PATH (см. Ниже)

Более длинный ответ

  • PhymlCommandline наследует класс AbstractCommandline, который является просто оболочкой для исполняемых файлов
  • Из документации

Обратите внимание, что по умолчанию мы предполагаем, что базовый инструмент установлен на системная переменная среды $ PATH. Это нормально под Linux / Unix, но может потребоваться сделать вручную под Windows. Кроме того, вы можете укажите полный путь к двоичному файлу в качестве первого аргумента (cmd):

...