Développer un script Python Raspberry à partir d'une fenêtre

10

Je veux développer un script Python Raspberry du côté Windows, pour plusieurs raisons: je veux garder tout le code (plus) en sécurité sur mon ordinateur, au cas où je ferais frire le RPi / essayer un autre projet / réinstaller le Pi. De plus, mon ordinateur principal avec les deux écrans est sous Windows et je trouve que l'utilisation de vim sur SSH (avec du mastic) n'est pas une bonne façon de le faire (opinion personnelle, mais je ne le trouve pas ergonomique).

J'ai trouvé ceci: http://visualgdb.com/tutorials/raspberry/ qui semble me permettre de développer une application C + pour la framboise, de la compiler à distance et ainsi de suite.

Y a-t-il quelque chose d'équivalent pour le développement de scripts python?

Ce qui me permettrait essentiellement:

  1. Développer en python sur mes fenêtres
  2. Pour appuyer sur le bouton "Exécuter" et faire déployer le ou les scripts sur le RPi et les lancer
  3. (Solution de rêve) Pour mettre des points d'arrêt et déboguer?
J4N
la source
Vous pourriez envisager d'utiliser un système CM tel que Git, Mercurial ou SVN. Personnellement, je préfère mercurial et avec lui, vous pouvez pousser les modifications depuis votre machine Windows et les insérer dans le Raspberry Pi.
James Mertz
J'ai actuellement un Git, mais ce n'est pas vraiment la question ici
J4N
D'où la raison pour laquelle il s'agit d'un commentaire et non d'une réponse;)
James Mertz
Assez bien :) Désolé
J4N

Réponses:

4

Découvrez PyCharm . Je suis un client payant heureux depuis des années, mais une édition communautaire gratuite est également disponible.

Il existe un plugin de surveillance de fichiers qui copiera les fichiers sur une machine distante (votre RPi). Et il a la possibilité d'effectuer un débogage à distance .

câbler les modules de débogage

En ce qui concerne la configuration du débogage à distance PyCharm, la première chose à faire est de câbler pycharm-debug.egg. Je suis sur un Mac et dans mon cas, le fichier est à /Applications/PyCharm.app/Contents/debug-eggs/pycharm-debug.egg. Je l'ai copié sur mon RPi avec la commande:

scp /Applications/PyCharm.app/Contents/debug-eggs/pycharm-debug.egg pi@mediapi:

Ce fichier doit être quelque part dans le chemin de Python pour qu'il puisse être trouvé. J'ai cherché un endroit approprié en exécutant ce qui suit:

pi@mediapi ~ $ python -c 'import sys; print sys.path'
['', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-linux2', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages', '/usr/lib/pymodules/python2.7']

À partir de cette liste, je pense que /usr/local/lib/python2.7/dist-packages/c'est le plus approprié (parce que c'est dedans /usr/local), donc:

sudo mv pycharm-debug.egg /usr/local/lib/python2.7/dist-packages/

Et nous avons besoin d'un .pthfichier pour l'injecter dans le chemin:

pi@mediapi ~ $ echo /usr/local/lib/python2.7/dist-packages/pycharm-debug.egg | sudo tee -a /usr/local/lib/python2.7/dist-packages/pycharm-debug.pth

Enfin, vérifiez la configuration:

pi@mediapi ~ $ python -c 'import pydevd; print pydevd'
<module 'pydevd' from '/usr/local/lib/python2.7/dist-packages/pycharm-debug.egg/pydevd.py'>

Cool, les modules de débogage sont câblés. On débogue un script. Je vais déboguer le script d'écoute que j'ai écrit pour ce post .

Configuration de PyCharm

Dans PyCharm, allez à Run -> Edit Configurations...

Appuyez sur le +signe en haut à gauche et sélectionnez Python Remote Debug. Donnez-lui simplement un nom, remote debuget vous avez terminé ici; cliquez sur ok.

configuration de débogage à distance

Maintenant, cliquez sur Run -> Debug 'remote debug'et vous verrez un message dans la console de débogage,Use the following code to connect to the debugger

Copiez les lignes, dans mon cas, elles ont fini par ressembler à ceci:

import pydevd
pydevd.settrace('localhost', port=56112, stdoutToServer=True, stderrToServer=True)

Collez-les en haut du fichier que vous déboguez et enregistrez le fichier.

Sans utiliser le plugin de synchronisation de fichiers, je copie les fichiers à l'aide de rsync:

[berto@g6]$ rsync -av ./ pi@mediapi:broadcast/

Maintenant, notez que la configuration indique localhost. La meilleure façon de câbler le débogueur est d'utiliser les capacités de redirection de port de SSH afin que le RPi puisse être sur votre bureau ou dans le monde entier et qu'il fonctionne de la même manière. SSH dans le RPi en utilisant cette commande pour lier le port distant au port local:

[berto@g6]$ ssh -R 56112:localhost:56112 pi@mediapi

PyCharm devrait vous montrer un message Waiting for process connection...

en attente de connexion au processus

Sur le RPi, exécutez le programme et vous verrez le débogueur entrer en jeu. Par défaut, il s'arrête sur la ligne juste après la ligne pydevd, que vous pouvez modifier dans la configuration si vous le souhaitez.

Et à ce stade, vous déboguez à distance! :)

point d'arrêt sur le script distant

berto
la source
Je vais y jeter un œil, j'ai déjà Resharper depuis un moment :)
J4N
Pourriez-vous peut-être donner un tutoriel ou un bref aperçu de la façon de configurer PyCharm pour le débogage à distance sur le pi? J'ai eu du mal à le faire fonctionner.
James Mertz
La réponse a été mise à jour avec une vue d'ensemble du débogage à distance. @KronoS
Berto
1

Une option consiste simplement à stocker vos scripts Python sur un lecteur réseau.

Par exemple, je garde tout mon code sur un ordinateur portable (correctement sauvegardé) dans un répertoire appelé code. J'exporte le répertoire vers le réseau en utilisant NFS.

Sur le Pi, le répertoire NFS de l'ordinateur portable est mappé sur / code.

Cela me permet de développer sur l'ordinateur portable (ou Pi) et d'exécuter le script sur le Pi simplement en accédant au Pi et en utilisant /code/script.py.

En général, je trouve que Python révèle suffisamment de mes erreurs avec sa trace pour que je n'aie pas besoin d'outils de débogage supplémentaires.

joan
la source
J'ai déjà pensé que les partages réseau étaient une possibilité, mais il me faut toujours aller sur le Pi, lancer et arrêter à chaque fois, et ne permettra jamais le débogage.
J4N
2
@ J4N J'aurais généralement une fenêtre de terminal SSH permanente ouverte sur l'ordinateur portable vers le Pi. Donc, exécuter le script ne serait qu'une flèche vers le haut, retour. Je n'ai pas eu de problèmes de débogage. Comme je l'ai dit, le backtrace fournira de nombreuses informations et pour toute autre chose, quelques impressions dispersées autour du script trouvent généralement le problème.
joan