notebook ipynb español como archivo abrir python jupyter

python - español - como abrir un archivo ipynb



¿Cómo ejecutar un archivo*.PY desde un archivo*.IPYNB en el cuaderno Jupyter? (3)

Estoy trabajando en un cuaderno de Python y me gustaría que el paquete grande de código de entrada [entrada] en un archivo [* .PY] lo llame desde el cuaderno .

Conozco la acción de ejecutar un archivo [ .PY] desde el Notebook y el comando varía entre Linux o Windows. Pero cuando hago esta acción y ejecuto el archivo [.PY] desde el cuaderno, no reconoce ninguna biblioteca o variable existente cargada en el cuaderno (es como que el archivo [ .PY] comienza desde cero ...).

¿Hay alguna forma de arreglar esto?

Un posible ejemplo simplificado del problema sería el siguiente:

In[1]: import numpy as np import matplotlib.pyplot as plt In[2]: def f(x): return np.exp(-x ** 2) In[3]: x = np.linspace(-1, 3, 100) In[4]: %run script.py

Donde " script.py " tiene el siguiente contenido:

plt.plot(x, f(x)) plt.xlabel("Eje $x$",fontsize=16) plt.ylabel("$f(x)$",fontsize=16) plt.title("Funcion $f(x)$")

  • En el problema real, el archivo [* .PY] no tiene 4 líneas de código, tiene suficiente más.

En la documentación de %run magic puedes encontrar:

- Ejecuto el archivo en el espacio de nombres de IPython en lugar de uno vacío. Esto es útil si está experimentando con un código escrito en un editor de texto que depende de las variables definidas interactivamente.

Por lo tanto, suministrar -i hace el truco:

%run -i ''script.py''

La forma "correcta" de hacerlo.

Tal vez el comando anterior es justo lo que necesita, pero con toda la atención que recibe esta pregunta, decidí agregarle unos centavos más a aquellos que no saben cómo se vería una forma más pitónica.
La solución anterior es un poco intrincada y confunde el código en el otro archivo (¿De dónde viene esta variable x ? ¿Y cuál es la función f ?).

Me gustaría mostrarle cómo hacerlo sin tener que ejecutar el otro archivo una y otra vez.
Solo conviértalo en un módulo con sus propias funciones y clases y luego impórtelo desde su computadora portátil o consola Jupyter. Esto también tiene la ventaja de que es fácilmente reutilizable y el asistente de contexto jupíter puede ayudarlo a completar o completar la documentación si escribió una.
Si está editando constantemente el otro archivo, entonces la autoreload viene en su ayuda.

Tu ejemplo se vería así:
script.py

import matplotlib.pyplot as plt def myplot(f, x): """ :param f: function to plot :type f: callable :param x: values for x :type x: list or ndarray Plots the function f(x). """ # yes, you can pass functions around as if # they were ordinary variables (they are) plt.plot(x, f(x)) plt.xlabel("Eje $x$",fontsize=16) plt.ylabel("$f(x)$",fontsize=16) plt.title("Funcion $f(x)$")

Consola jupyter

In [1]: import numpy as np In [2]: %load_ext autoreload In [3]: %autoreload 1 In [4]: %aimport script In [5]: def f(x): : return np.exp(-x ** 2) : : In [6]: x = np.linspace(-1, 3, 100) In [7]: script.myplot(f, x) In [8]: ?script.myplot Signature: script.myplot(f, x) Docstring: :param f: function to plot :type f: callable :param x: x values :type x: list or ndarray File: [...]/script.py Type: function


Quizás no sea muy elegante, pero cumple su función:

exec(open("script.py").read())


las siguientes líneas también funcionarían

!python script.py