Parte 4: Hello Modules¶
Tradução assistida por IA - saiba mais e sugira melhorias
Esta seção aborda como organizar o código do seu fluxo de trabalho para tornar o desenvolvimento e a manutenção do seu pipeline mais eficientes e sustentáveis. Especificamente, vamos demonstrar como usar módulos.
No Nextflow, um módulo é uma única definição de processo que é encapsulada por si só em um arquivo de código independente. Para usar um módulo em um fluxo de trabalho, você apenas adiciona uma única linha de declaração de importação ao seu arquivo de código do fluxo de trabalho; então você pode integrar o processo no fluxo de trabalho da mesma forma que normalmente faria. Isso torna possível reutilizar definições de processos em múltiplos fluxos de trabalho sem produzir múltiplas cópias do código.
Quando começamos a desenvolver nosso fluxo de trabalho, escrevemos tudo em um único arquivo de código. Agora vamos mover os processos para módulos individuais.
Isso tornará nosso código mais compartilhável, flexível e de fácil manutenção.
Como começar a partir desta seção
Esta seção do curso pressupõe que você completou as Partes 1-3 do curso Olá Nextflow, mas se você está confortável com os conceitos básicos abordados nessas seções, pode começar a partir daqui sem fazer nada especial.
0. Aquecimento: Execute hello-modules.nf¶
Vamos usar o script de fluxo de trabalho hello-modules.nf como ponto de partida.
Ele é equivalente ao script produzido ao trabalhar na Parte 3 deste curso de treinamento, exceto que mudamos os destinos de saída:
| hello-modules.nf | |
|---|---|
Apenas para ter certeza de que tudo está funcionando, execute o script uma vez antes de fazer quaisquer alterações:
Saída do comando
Como anteriormente, você encontrará os arquivos de saída no diretório especificado no bloco output (aqui, results/hello_modules/).
Conteúdo do diretório
Se funcionou para você, você está pronto para aprender como modularizar o código do seu fluxo de trabalho.
1. Crie um diretório para armazenar módulos¶
É uma boa prática armazenar seus módulos em um diretório específico.
Você pode chamar esse diretório de qualquer nome, mas a convenção é chamá-lo de modules/.
Dica
Aqui estamos mostrando como usar módulos locais, ou seja, módulos armazenados localmente no mesmo repositório que o restante do código do fluxo de trabalho, em contraste com módulos remotos, que são armazenados em outros repositórios (remotos). Para mais informações sobre módulos remotos, veja a documentação.
2. Crie um módulo para sayHello()¶
Na sua forma mais simples, transformar um processo existente em um módulo é pouco mais do que uma operação de copiar e colar. Vamos criar um esboço de arquivo para o módulo, copiar o código relevante e então excluí-lo do arquivo principal do fluxo de trabalho.
Então tudo o que precisaremos fazer é adicionar uma declaração de importação para que o Nextflow saiba trazer o código relevante em tempo de execução.
2.1. Crie um esboço de arquivo para o novo módulo¶
Vamos criar um arquivo vazio para o módulo chamado sayHello.nf.
Isso nos dá um lugar para colocar o código do processo.
2.2. Mova o código do processo sayHello para o arquivo do módulo¶
Copie toda a definição do processo do arquivo de fluxo de trabalho para o arquivo do módulo, certificando-se de copiar também o shebang #!/usr/bin/env nextflow.
| modules/sayHello.nf | |
|---|---|
Uma vez feito isso, exclua a definição do processo do arquivo de fluxo de trabalho, mas certifique-se de deixar o shebang no lugar.
2.3. Adicione uma declaração de importação antes do bloco de fluxo de trabalho¶
A sintaxe para importar um módulo local é bastante direta:
Vamos inserir isso acima do bloco params e preenchê-lo adequadamente.
Você vê que preenchemos o nome do módulo, sayHello, e o caminho para o arquivo contendo o código do módulo, ./modules/sayHello.nf.
2.4. Execute o fluxo de trabalho¶
Estamos executando o fluxo de trabalho com essencialmente o mesmo código e entradas de antes, então vamos executar com a flag -resume e ver o que acontece.
Saída do comando
Isso deve ser executado muito rapidamente porque tudo está em cache. Sinta-se à vontade para verificar as saídas publicadas.
O Nextflow reconheceu que ainda é todo o mesmo trabalho a ser feito, mesmo que o código esteja dividido em múltiplos arquivos.
Conclusão¶
Você sabe como extrair um processo para um módulo local e você sabe que fazer isso não quebra a capacidade de retomada do fluxo de trabalho.
Qual é o próximo passo?¶
Pratique criando mais módulos. Uma vez que você fez um, você pode fazer um milhão mais... Mas vamos fazer apenas mais dois por enquanto.
3. Modularize o processo convertToUpper()¶
3.1. Crie um esboço de arquivo para o novo módulo¶
Crie um arquivo vazio para o módulo chamado convertToUpper.nf.
3.2. Mova o código do processo convertToUpper para o arquivo do módulo¶
Copie toda a definição do processo do arquivo de fluxo de trabalho para o arquivo do módulo, certificando-se de copiar também o shebang #!/usr/bin/env nextflow.
| modules/convertToUpper.nf | |
|---|---|
Uma vez feito isso, exclua a definição do processo do arquivo de fluxo de trabalho, mas certifique-se de deixar o shebang no lugar.
3.3. Adicione uma declaração de importação antes do bloco params¶
Insira a declaração de importação acima do bloco params e preencha-a adequadamente.
Isso deve começar a parecer muito familiar.
3.4. Execute o fluxo de trabalho novamente¶
Execute isso com a flag -resume.
Saída do comando
Isso ainda deve produzir a mesma saída de antes.
Dois feitos, mais um para fazer!
4. Modularize o processo collectGreetings()¶
4.1. Crie um esboço de arquivo para o novo módulo¶
Crie um arquivo vazio para o módulo chamado collectGreetings.nf.
4.2. Mova o código do processo collectGreetings para o arquivo do módulo¶
Copie toda a definição do processo do arquivo de fluxo de trabalho para o arquivo do módulo, certificando-se de copiar também o shebang #!/usr/bin/env nextflow.
Uma vez feito isso, exclua a definição do processo do arquivo de fluxo de trabalho, mas certifique-se de deixar o shebang no lugar.
4.3. Adicione uma declaração de importação antes do bloco params¶
Insira a declaração de importação acima do bloco params e preencha-a adequadamente.
| hello-modules.nf | |
|---|---|
Último!
4.4. Execute o fluxo de trabalho¶
Execute isso com a flag -resume.
Saída do comando
Isso ainda deve produzir a mesma saída de antes.
Conclusão¶
Você sabe como modularizar múltiplos processos em um fluxo de trabalho.
Parabéns, você fez todo esse trabalho e absolutamente nada mudou na forma como o pipeline funciona!
Brincadeiras à parte, agora seu código é mais modular, e se você decidir escrever outro pipeline que chame um desses processos, você só precisa digitar uma curta declaração de importação para usar o módulo relevante. Isso é melhor do que copiar e colar o código, porque se mais tarde você decidir melhorar o módulo, todos os seus pipelines herdarão as melhorias.
Qual é o próximo passo?¶
Faça uma pequena pausa se quiser.
Quando estiver pronto, passe para a Parte 5: Olá Contêineres para aprender como usar contêineres para gerenciar dependências de software de forma mais conveniente e reproduzível.
Quiz¶
O que é um módulo no Nextflow?
Qual é a convenção de nomenclatura recomendada para arquivos de módulo?
Onde os arquivos de módulo devem ser armazenados?
Qual é a sintaxe correta para importar um módulo?
O que acontece com a funcionalidade -resume ao usar módulos?
Quais são os benefícios de usar módulos? (Selecione todas as opções aplicáveis)