Estou trabalhando em um pipeline do Nextflow que usa um módulo personalizado. Este módulo inclui um script Python ( script_1.py
) localizado em uma pasta aninhada <module-dir>/resources/usr/bin
. O script_1.py
foi tornado executável e o nextflow.enable.moduleBinaries
foi definido como true
no ./nextflow.config
arquivo. No entanto, quando tento executar o pipeline, recebo um erro informando que o script Python não pode ser encontrado.
Estrutura de diretório do módulo
modules/
└── local/
└── mymodule/
├── environment.yml
├── main.nf
├── resources/
│ └── usr/
│ └── bin/
│ └── script_1.py
└── work/
Mensagem de erro
Aqui está o erro que recebo ao executar o pipeline:
Caused by:
Process `MyProcess (1)` terminated with an error exit status (2)
Command executed:
python script_1.py
cat <<-END_VERSIONS > versions.yml
"MyProcess":
python: $(python --version 2>&1 | sed 's/Python //g')
END_VERSIONS
Command exit status:
2
Command output:
(empty)
Command error:
python: can't open file 'script_1.py': [Errno 2] No such file or directory
O que eu tentei
No meu main.nf
, eu tinha o seguinte:
#!/usr/bin/env nextflow
include { MyProcess } from './modules/local/mymodule/main.nf'
E no meu ./modules/local/mymodule/main.nf
, eu tinha o seguinte:
#!/usr/bin/env nextflow
process MyProcess{
conda "${moduleDir}/environment.yml"
input:
path(input_folder)
output:
path("data.csv")
path "versions.yml" , emit: versions
script:
"""
python script_1.py ${input_folder}
cat <<-END_VERSIONS > versions.yml
"${task.process}":
python: \$(python --version 2>&1 | sed 's/Python //g')
END_VERSIONS
"""
}
Mas script_1.py
nunca é encontrado e o processo falha.
Minha pergunta
Esta é a maneira correta de referenciar esses scripts no módulo em pipelines do Nextflow?