Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

936
Views
¿Cómo ejecutar un archivo * .PY desde un archivo * .IPYNB en el cuaderno Jupyter?

Estoy trabajando en un Python Notebook y me gustaría que el código de entrada grande [input] se empaquete en archivos [* .PY] y llame a estos archivos desde el notebook .

Conozco la acción de ejecutar un archivo [.PY] desde el portátil y el comando varía entre Linux o Windows. Pero cuando realizo esta acción y ejecuto el archivo [.PY] desde el cuaderno, no reconoce ninguna biblioteca o variable existente cargada en el cuaderno (es como si el archivo [ .PY] comenzara 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 bastantes más.
over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

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 código escrito en un editor de texto que depende de variables definidas de forma interactiva.

Por lo tanto, proporcionar -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 algunos centavos más para aquellos que no saben cómo sería una forma más pitónica.
La solución anterior es un poco complicada y hace que el código en el otro archivo sea confuso (¿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.
Simplemente 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 hacerlo fácilmente reutilizable y el asistente de contexto de jupyters puede ayudarlo con el autocompletado o mostrarle la cadena de documentación si escribió una.
Si está editando constantemente el otro archivo, entonces autoreload viene en su ayuda.

Su ejemplo se vería así:
guión.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
over 4 years ago · Santiago Trujillo Report

0

las siguientes líneas también funcionarían

 !python script.py
over 4 years ago · Santiago Trujillo Report

0

Tal vez no sea muy elegante, pero hace el trabajo:

 exec(open("script.py").read())
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!