org-babel – Python en org babel no funcionará

Pregunta:

Recientemente me mudé a una computadora nueva y no puedo hacer que org babel funcione con Python (funcionó bien en mi máquina anterior). Estoy usando OS X 10.12.6 con Emacs para Mac OS X basado en Emacs 25.3 con org-mode-9.1.12 y Anaconda3 como mi distribución de Python.

El problema es que cada vez que intento evaluar un bloque de código, aparece el mensaje

Advertencia (python): su 'python-shell-intérprete' no parece ser compatible con readline, sin embargo, 'python-shell-deployment-native-enable' era t y "python" no es parte de 'python-shell-deployment -Lista de intérpretes nativos discapacitados. Las finalizaciones nativas se han inhabilitado localmente ".

En mi archivo init.el cargo exec-path-from-shell (porque estoy usando una Mac y no llamo a Emacs desde la línea de comandos). Mi shell (bash) tiene la ruta a mi distribución de Python, anaconda3, que está en mi directorio de inicio (debido a las nuevas reglas de seguridad informática en mi lugar de trabajo, previene una instalación en todo el sistema). Python funciona bien desde la línea de comandos (los comandos python y python3 son enlaces simbólicos al ejecutable de python) y desde los cuadernos de Jupyter, pero no desde un archivo org emacs. Mi distribución de Python tiene el módulo readline y se carga bien desde la terminal.

Configuré org-babel usando

(org-babel-do-load-languages
  'org-babel-load-languages
    '((python . t)
      (matlab . t)))

Esto solía funcionar en mi sistema anterior (antes de las nuevas reglas de seguridad, lo que podría ser una pista falsa). Supongo que, de alguna manera, org está detectando el pitón incorrecto, pero no puedo entender cómo ni por qué.

Cualquier idea sobre esto sera altamente apreciada.

Respuesta:

¡Ah! Es completamente posible que Python esté funcionando ; dependiendo de cómo haya configurado exactamente sus bloques python src en Org, es posible que simplemente no obtenga ningún resultado. Es posible que ya sepa esto, pero solo para cubrir las bases: el comportamiento predeterminado del bloque Org python src es que su valor de resultado es lo último que devuelve su bloque src. Por lo tanto, esto no funciona:

#+BEGIN_SRC python
print(4)
#+END_SRC

#+RESULTS:
: None

Puede usar return (porque Org implícitamente está envolviendo su código en una función):

#+BEGIN_SRC python
return 4
#+END_SRC

#+RESULTS:
: 4

O puede utilizar el argumento: encabezado de :results output :

#+BEGIN_SRC python :results output
print(4)
#+END_SRC

#+RESULTS:
: 4

Es posible que desee asegurarse de que el valor de python-shell-interpreter apunte a la pitón que está esperando. (Puede hacer esto con Ch v python-shell-interpreter .) Si está mal, puede cambiarlo con (setq python-shell-interpreter "PATH TO YOUR REAL PYTHON") .

Hecho todo esto, debería poder silenciar ese mensaje de error de dos maneras:

  1. Asegúrese de que readline esté instalado en su sistema. (No estoy familiarizado con las distribuciones de anaconda python específicamente, pero esto me funciona con mi instalación regular de python3)
  2. En su archivo de inicio, desactive la finalización nativa con (setq python-shell-completion-native-enable nil) , o llamando manualmente al comando Mx python-completion-native-toggle .

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım