Проблема:
Изнутри snakemake (python3) я запускаю некоторое программное обеспечение, написанное на python2. Snakemake запускает программное обеспечение с использованием python3, игнорируя shebang в файле, вызывающем python2. Это чужое программное обеспечение, поэтому я не хочу переписывать все, чтобы оно работало на python3.
Вопрос:
Как заставить snakemake запускать версию python в shebang внешнего скрипта, а не версию python в текущем env?
Предостережения:
Я знаю, что snakemake позволяет пользователю форсировать определенную среду с помощью --use-conda
и вызывать среду python2. Однако я не хочу этого делать, так как полученный сценарий будет менее переносимым.
Что я пробовал:
Я пробовал добавлять внешние скрипты python с помощью #!/usr/bin/env python2
или #!/usr/bin/python2
, и каждый раз скрипты терпели неудачу, потому что Snakemake запускал их с python3 вместо python2. Другие программы с любым из этих шебанг запускаются в python2, когда я вызываю скрипт из оболочки вне snakemake.
Пример:
Это змеиный файл:
#snakefile
rule all:
input:
my_output.txt
rule foo:
output:
txt = my_output.txt
shell:
"""
external_program.py > {output.txt}
"""
Это external_program.py
:
#!/usr/bin/env python2
print "this will work in python2, but not python3"