Saltar al contenido

Spyder: ¿Cómo editar un script de Python localmente y ejecutarlo en un kernel remoto?

Solución:

El tutorial que mencionas es un poco reciente, ya que Spyder ahora tiene la capacidad de conectarse a núcleos remotos. La casilla de verificación “Este es un kernel remoto”, cuando está marcada, habilita la parte del diálogo donde puede ingresar sus credenciales de conexión ssh. (Debería necesitar esto a menos que haya abierto manualmente los túneles ssh necesarios para reenviar los puertos de proceso de su kernel remoto …)

Además, la información de conexión de ipython (el archivo json) debe corresponder al kernel remoto, que se ejecuta en su raspberry pi.

Finalmente, en este momento no hay forma de copiar el script que se encuentra en su PC local cuando presiona Ejecutar. El método preferido en realidad sería el inverso: monte el sistema de archivos de su raspberry pi usando una herramienta como sshfs y edítelos en su lugar. El plan es implementar un cliente sftp en Spyder para que no sea necesario y podrá explorar el sistema de archivos remoto desde el explorador de archivos de Spyder.

Para resumir:

1) asumiendo que ha iniciado sesión en su raspberry pi, inicie un kernel local de IPython con el kernel de ipython. Debería darle el nombre de su archivo json para usar, que debe copiar a su PC local.

2) en spyder en su pc local, conéctese a un kernel remoto con ese archivo json y sus credenciales ssh

Sé que es engorroso, pero es un primer paso ..

Después de una búsqueda en el site-packagesspyderlib directorio para la palabra clave %run, Encontré el método (en site-packagesspyderlibpluginsipythonconsole.py) que construye el %run mando:

    def run_script_in_current_client(self, filename, wdir, args, debug):
    """Run script in current client, if any"""
    norm = lambda text: remove_backslashes(to_text_string(text))
    client = self.get_current_client()
    if client is not None:
        # Internal kernels, use runfile
        if client.kernel_widget_id is not None:
            line = "%s('%s'" % ('debugfile' if debug else 'runfile',
                                norm(filename))
            if args:
                line += ", args="%s"" % norm(args)
            if wdir:
                line += ", wdir="%s"" % norm(wdir)
            line += ")"
        else: # External kernels, use %run
            line = "%run "
            if debug:
                line += "-d "
            line += ""%s"" % to_text_string(filename)
            if args:
                line += " %s" % norm(args)
        self.execute_python_code(line)
        self.visibility_changed(True)
        self.raise_()
    else:
        #XXX: not sure it can really happen
        QMessageBox.warning(self, _('Warning'),
            _("No IPython console is currently available to run <b>%s</b>."
              "<br><br>Please open a new one and try again."
              ) % osp.basename(filename), QMessageBox.Ok)

Agregué el siguiente código para convertir rutas después else: # External kernels, use %run

            # ----added to remap local dir to remote dir-------
            localpath = "Z:wk"
            remotepath = "/mnt/sdb1/wk"
            if localpath in filename:
                # convert path to linux path
                filename = filename.replace(localpath, remotepath)
                filename = filename.replace("\", "https://foroayuda.es/")
            # ----- END mod

ahora ejecuta el archivo en la máquina remota cuando presiono F5. Estoy en Spyder 2.3.9 con el recurso compartido de samba asignado a z: drive.

Otra opción es usar celdas de Spyder para enviar todo el contenido de su archivo a la consola de IPython. Creo que esto es más fácil que montar su sistema de archivos remoto con Samba o sshfs (en caso de que eso no sea posible o difícil de hacer).

Las celdas se definen agregando líneas del formulario # %% a su archivo. Por ejemplo, digamos que su archivo es:

# -*- coding: utf-8 -*-

def f(x):
    print(x + x)

f(5)

Entonces puedes agregar una celda en la parte inferior como esta

# -*- coding: utf-8 -*-

def f(x):
    print(x + x)

f(5)

# %%

y presionando control + Ingresar encima de la línea de celda, el contenido completo de su archivo se enviará a la consola y se evaluará de inmediato.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *