La mejor manera de ejecutar código Julia en un cuaderno IPython (o código Python en un cuaderno IJulia)


Mi objetivo es ejecutar solo unas pocas líneas de Julia en un cuaderno IPython donde la mayoría del código será Python para algunos experimentos ...

Encontré un buen ejemplo de cuaderno aquí:

Http://nbviewer.ipython.org/github/JuliaLang/IJulia.jl/blob/master/python/doc/JuliaMagic.ipynb

Y ahora me pregunto cómo instalaría la extensión IPython para Julia (estoy usando principalmente IPython 2.1) para que pueda cargarla a través de

%load_ext julia.magic

También estoy muy nuevo para julia y me pregunto si hay un beneficio de rendimiento de "mezclar numpy y julia" como se muestra en este cuaderno (sobre el código regular numpy de Python o regular Julia)

Cuando entiendo el concepto correctamente, usaría IJulia notebooks (que configuré con éxito) si solo estoy interesado en ejecutar Julia code?

Instalé IJulia, y también puedo ejecutar IJulia notebooks, pero en realidad solo quería tener una pequeña porción de código de Julia en mi cuaderno, el resto debería ser Python / Cython. Desafortunadamente, he leído que las funciones magic aún no están completamente soportadas: "Una diferencia con IPython es que el núcleo IJulia actualmente no soporta" magics", que son comandos especiales con el prefijo % o %% para ejecutar código en un lenguaje diferente "

¿Hay alguna forma de ejecutar código Python en los cuadernos de IJulia?

Author: Sebastian, 2014-06-07

5 answers

Ejecutar Julia dentro de un cuaderno IPython


Hack

Para ejecutar fragmentos de Julia (o otro lenguaje) dentro de un cuaderno IPython, simplemente añado la cadena 'julia' a la default lista en el método _script_magics_default de la clase ScriptMagics en:

  • /usr/lib/python3.4/site-packages/IPython/core/magics/script.py o
  • /usr/lib/python2.7/site-packages/IPython/core/magics/script.py.

Ejemplo:

# like this:
defaults = [
    'sh',
    'bash',
    'perl',
    'ruby',
    'python',
    'python2',
    'python3',
    'pypy',
    'julia', # add your own magic
]

IPython * Julia magic*

[22] Julia Magic (Bidireccional)

Para usar %load_ext julia.magic, tendría que ejecutar el setup.py aquí:

Actualizar (09/04/2014): el archivo setup.py se ha movido a pyjulia.jl:

Que obtienes cuando Pkg.add("IJulia") clona el repositorio en tu sistema de archivos:

cd ~/.julia/v0.3/IJulia/python/
sudo python2 setup.py install

Actualmente esto solo funciona para mí en Python2. Python3 se queja de:

ImportError: No module named 'core'

Cuando lo intento para cargar la extensión, pero se instala sin quejas.

Después de instalarlo, también puede hacer esto desde dentro de Python2:

from julia import Julia
j = Julia()
arr = j.run('[1:10]')
type(arr) # numpy.ndarray

Ejecutar un script desde su sistema shell

Use la sintaxis de modo shell en una celda de notebook:

!julia my_script.jl



Ejecutar Python dentro de IJulia notebook


Utilizando PyCall

No es realmente ejecutando código python en el contexto que desee, pero también puede usar bibliotecas Python desde Julia:

using PyCall
@pyimport math
println(math.pi)

Ejecutar un script desde su sistema shell

Utilice la sintaxis de modo shell en un cuaderno celda:

;python my_script.py
 26
Author: SalchiPapa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-09-05 05:44:12

Otra opción es usar Vaso de precipitados. Tienen un cuaderno tutorial disponible que mezcla R y Python; usar Julia es igual de fácil.

 8
Author: Jeff Hammerbacher,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-10 16:52:02

Si desea ejecutar un cuaderno completo de solo julia (o donde llame a otros idiomas solo desde julia), entonces hay una solución más limpia. En primer lugar, lanzar julia y hacer

Pkg.add("IJulia")

Para obtener el paquete IJulia. Entonces usted puede

ipython notebook --profile julia

Y su cuaderno tendrá a julia como idioma nativo (predeterminado).

H/t a David Sanders y sus excelentes tutoriales de juliaque están escritos en cuadernos de IPython; video aquí.

 8
Author: David Ketcheson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-11-29 13:40:00

Para completar esta buena respuesta , sin ningún hackeo, y sin modificar ningún archivo del sistema, una solución simple es con la %%script magia :

In [1]: %%script julia
   ...: println("Hi from a Julia sub-process")
   ...: a = [1:10]

Tenga cuidado de que la celda se ejecute en un subproceso, por lo que lo que se hizo en ella es no accesible por el resto de la sesión de IPython:

In [2]: print("Hi from the main IPython process")
   ...: print(a)  # <-- not available from the Julia code, will fail !
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-2-c5a4f3535135> in <module>()
----> 1 print(a)

NameError: name 'a' is not defined
 2
Author: Næreen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-23 13:32:51

Un método limpio y agradable se describe en este cuaderno: https://github.com/binder-examples/julia-python/blob/master/python-and-julia.ipynb .

Utiliza fuertemente IPython magic (%julia <julia code> inlineado en Python, y %%julia celdas), pero el resultado es bastante impresionante: los dos procesos Python y Julia pueden usar las mismas variables y memoria.

 0
Author: Næreen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-26 06:10:55