Preparando o emacs org-mode para rodar código fonte Python

Baseado no manual do site orgmode.org.

Incluindo Python como opção para code blocks

Primeiro, alterei a variável do emacs org-babel-do-load-languages para incluir o python. Isso pode ser feito tanto usando o comando customize-variable (M-x customize-variable) como editando diretamente o .emacs .

Usei o customize-variable e adicionei a linguagem Python, já estava na lista o emacs-lisp. No final do processo, o seguinte código foi adicionado ao meu .emacs :

‘(org-babel-load-languages ‘((python . t) (emacs-lisp . t)))

update-alternatives para Python3

Segundo, foi necessário adicionar um atalho para que o comando python executasse diretamente o python3 (estou usando Debian). Eu segui estas instruções.

No meu sistema, esta era a situação:

arkanoid@Sandstorm:~$ python
-bash: python: command not found
arkanoid@Sandstorm:~$ l /usr/bin/pyth*
lrwxrwxrwx 1 root root 9 Mar 2 15:55 /usr/bin/python3 -> python3.9
-rwxr-xr-x 1 root root 5.3M Feb 28 14:03 /usr/bin/python3.9
lrwxrwxrwx 1 root root 33 Feb 28 14:03 /usr/bin/python3.9-config -> x86_64-linux-gnu-python3.9-config
lrwxrwxrwx 1 root root 16 Mar 2 15:55 /usr/bin/python3-config -> python3.9-config
arkanoid@Sandstorm:~$

Ou seja, ele executa como python3 mas não como python. Ocorre que o code block no org-mode tenta executar o comando python. Sendo assim achei mais prático adicionar um atalho do comando python para chamar diretamente o python3.

No Debian, isso foi feito assim:

sudo update-alternatives –install /usr/bin/python python /usr/bin/python3.9 1

Code block de exemplo

Testei o seguinte code block:

+NAME: teste1
 +begin_src python
 seconds_in_a_day = 24 * 60 * 60
 seconds_in_a_day
 +end_src

 +RESULTS: teste1
 : None

Rodando o código com C-c C-c deu o resultado indicado abaixo, “None”. Para o org-mode obter corretamente o resultado do código Python executado é preciso algumas mudanças. Basta por exemplo incluir o comando return no final com a variável. Mas para evitar isso também pode-se incluir no code block os argumentos :session :results value. Assim:

+NAME: teste1
 +begin_src python :session :results value
 seconds_in_a_day = 24 * 60 * 60
 seconds_in_a_day
 +end_src

 +RESULTS: teste1
 : 86400

Incluindo essas opções no cabeçalho do code block ele retorna corretamente a última chamada feita no código em Python, no caso avaliar a variável seconds_in_a_day.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *