J'utilise Spyder 2.3.1 sous Windows 7 et j'ai un noyau iPython 2.3 en cours d'exécution sur un OS Linux Rasperry Pi RASPBIAN.

Je peux me connecter à un noyau externe, en utilisant un fichier .json et ce tutoriel: Console ipython distante

Mais quoi maintenant? Si je "lance" un script (F5), le noyau essaie d'exécuter le script comme:

%run "C:\test.py"

ERREUR: fichier u'C:\\test.py' introuvable.

Cela revient avec une erreur, ofc, car le script se trouve sur ma machine sous c: et non sur la machine distante / raspberry pi. Comment dire à Spyder de copier d'abord le script sur la machine distante et de l'exécuter là-bas?

Si je coche la case "ceci est un noyau distant", je ne peux plus me connecter au noyau existant. Que signifie cette boîte? Copiera-t-il le script via SSH sur la machine distante avant l'exécution? Si j'entre les informations de connexion SSH, j'obtiens une erreur "Il semble que le noyau soit mort de manière inattendue".

8
venti 2 nov. 2014 à 15:36

4 réponses

Meilleure réponse

Le tutoriel que vous mentionnez est un peu à jour car Spyder a désormais la possibilité de se connecter à des noyaux distants. La case à cocher «Ceci est un noyau distant», lorsqu'elle est cochée, active la partie de la boîte de dialogue dans laquelle vous pouvez entrer vos informations de connexion ssh. (Vous devriez en avoir besoin à moins d'avoir ouvert manuellement les tunnels ssh requis pour transférer les ports de processus de votre noyau distant ...)

De plus, les informations de connexion ipython (le fichier json) doivent correspondre au noyau distant, fonctionnant sur votre raspberry pi.

Enfin, il n'y a aucun moyen pour l'instant de copier le script se trouvant sur votre PC local lorsque vous appuyez sur Exécuter. La méthode préférée serait en fait l'inverse: monter le système de fichiers de votre raspberry pi à l'aide d'un outil comme sshfs et les modifier en place. Le plan consiste à implémenter un client sftp dans Spyder afin qu'il ne soit pas requis et que vous puissiez explorer le système de fichiers distant à partir de l'explorateur de fichiers de Spyder.

Résumer:

1) en supposant que vous êtes connecté à votre raspberry pi, lancez un noyau IPython local avec le noyau ipython. Il devrait vous donner le nom de votre fichier json à utiliser, que vous devez copier sur votre PC local.

2) Dans Spyder sur votre PC local, connectez-vous à un noyau distant avec ce fichier json et vos informations d'identification ssh

Je sais que c'est lourd, mais c'est un premier pas ..

4
Quant 2 nov. 2014 à 23:22

Je pensais juste faire mon premier post pour mettre à jour la réponse de Roy Cai pour Spyder 4 au cas où quelqu'un le chercherait. La réponse de Roy a parfaitement fonctionné pour moi. Spyder 4 a déplacé le code correspondant de l'endroit où il se trouvait lorsqu'il a écrit la réponse. La méthode est maintenant dans \ Lib \ site-packages \ spyder \ plugins \ ipythonconsole et le fichier python est plugin.py.

Sinon, tout fonctionne de la même manière qu'auparavant - L'endroit où insérer le code modifié est le même, et la même mise à jour le corrige.

(accessoirement - oui pour la possibilité d'enregistrer les informations de connexion pour se connecter à des noyaux distants dans Spyder 4!)

2
ResumeMan 23 janv. 2020 à 07:51

Une autre option consiste à utiliser des cellules Spyder pour envoyer tout le contenu de votre fichier à la console IPython. Je pense que c'est plus facile que de monter votre système de fichiers distant avec Samba ou sshfs (au cas où ce ne serait pas possible ou difficile à faire).

Les cellules sont définies en ajoutant des lignes du formulaire # %% à votre fichier. Par exemple, supposons que votre fichier soit:

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

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

f(5)

Ensuite, vous pouvez simplement ajouter une cellule en bas comme ceci

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

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

f(5)

# %%

Et en appuyant sur Ctrl + Entrée au-dessus de la ligne de cellule, le contenu complet de votre fichier sera envoyé à la console et évalué immédiatement.

2
Carlos Cordoba 5 nov. 2014 à 13:35

Après une recherche dans le répertoire site-packages\spyderlib du mot clé %run, j'ai trouvé la méthode (dans site-packages\spyderlib\plugins\ipythonconsole.py) qui construit la commande %run:

    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)

J'ai ajouté le code suivant pour convertir les chemins aprè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("\\", "/")
            # ----- END mod

Maintenant, il exécute le fichier sur la machine distante lorsque je frappe F5. Je suis sur Spyder 2.3.9 avec le partage samba mappé sur z: drive.

2
Roy Cai 21 oct. 2016 à 23:28