Desarrolle un script de Raspberry python desde Windows

10

Quiero desarrollar un script de Raspberry python desde el lado de Windows, por varias razones: quiero mantener todo el código (más) seguro en mi computadora, en caso de que fríe el RPi / intente otro proyecto / reinstale el Pi. Además, mi computadora principal con las dos pantallas está en Windows y encuentro que usar vim sobre SSH (con masilla) no es una buena forma de hacerlo (opinión personal, pero no me parece ergonómico).

Encontré esto: http://visualgdb.com/tutorials/raspberry/ que parece permitirme desarrollar una aplicación C + para Raspberry, compilarla de forma remota, etc.

¿Hay algo equivalente para el desarrollo del script python?

Lo que básicamente me permitiría:

  1. Para desarrollar en python en mis ventanas
  2. Para presionar el botón "Ejecutar" y tener los scripts implementados en el RPi, y lanzar
  3. (Solución ideal) ¿Para poner puntos de interrupción y depuración?
J4N
fuente
Puede considerar usar un sistema CM como Git, Mercurial o SVN. Personalmente, prefiero mercurial y con él puede empujar los cambios desde su máquina de Windows y colocarlos en la frambuesa pi.
James Mertz
Actualmente tengo un Git, pero esta no es realmente la pregunta aquí
J4N
Por eso es un comentario y no una respuesta;)
James Mertz
Bastante justo :) Lo siento
J4N

Respuestas:

4

Echa un vistazo a PyCharm . He sido un cliente que paga feliz por años, sin embargo, también hay disponible una edición comunitaria gratuita .

Hay un complemento de observación de archivos que copiará los archivos a una máquina remota (su RPi). Y tiene la capacidad de realizar depuración remota .

cablear módulos de depuración

Con respecto a la configuración de la depuración remota de PyCharm, lo primero que debe hacer es realizar la conexión pycharm-debug.egg. Estoy en una Mac y en mi caso el archivo está en /Applications/PyCharm.app/Contents/debug-eggs/pycharm-debug.egg. Lo copié en mi RPi con el comando:

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

Este archivo debe estar en algún lugar de la ruta de Python para poder encontrarlo. Busqué un lugar adecuado ejecutando lo siguiente:

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']

De esa lista, creo que /usr/local/lib/python2.7/dist-packages/es más adecuado (porque está en /usr/local), así que:

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

Y necesitamos un .ptharchivo para inyectarlo en la ruta:

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

Finalmente, verifique la configuración:

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

Genial, los módulos de depuración están conectados. Activado para depurar un script. Voy a depurar el guión de escucha que escribí para esta publicación .

Configuración de PyCharm

En PyCharm, vaya a Run -> Edit Configurations...

Presiona el +letrero en la esquina superior izquierda y selecciona Python Remote Debug. Simplemente dale un nombre remote debugy listo; pulsa ok

configuración de depuración remota

Ahora haga clic en Run -> Debug 'remote debug'y verá un mensaje en la consola de depuración,Use the following code to connect to the debugger

Copie las líneas, en mi caso, terminaron luciendo así:

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

Pégalos en la parte superior del archivo que estás depurando y guarda el archivo.

Sin usar el complemento de sincronización de archivos, copio los archivos usando rsync:

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

Ahora, observe que la configuración dice localhost. La mejor manera de cablear el depurador es usar las capacidades de reenvío de puertos de SSH para que el RPi pueda estar en su escritorio o en todo el mundo y funcione de la misma manera. SSH en el RPi usando este comando para vincular el puerto remoto al puerto local

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

PyCharm debería mostrarte un mensaje Waiting for process connection...

esperando la conexión de proceso

En el RPi, ejecute el programa y verá cómo se activa el depurador. Por defecto, se detiene en la línea justo después de la línea de pydevd, que puede cambiar en la configuración si lo desea.

¡Y en ese momento estás depurando remotamente! :)

punto de interrupción en script remoto

berto
fuente
Voy a echar un vistazo, ya tengo Resharper por un tiempo :)
J4N
¿Podría dar un tutorial o una breve descripción general de cómo configurar PyCharm para la depuración remota en el pi? He tenido problemas para que funcione.
James Mertz
La respuesta se ha actualizado con una descripción general de depuración remota. @KronoS
berto
1

Una opción es simplemente almacenar sus scripts Python en una unidad de red.

Por ejemplo, guardo todo mi código en una computadora portátil (con una copia de seguridad adecuada) en un directorio llamado código. Exporto el directorio a la red usando NFS.

En el Pi, el directorio NFS de la computadora portátil está asignado a / code.

Eso me permite desarrollar en la computadora portátil (o Pi) y ejecutar el script en la Pi simplemente enviando a la Pi y usando /code/script.py.

En general, encuentro que Python revela lo suficiente sobre mis errores con su traza inversa para que no necesite herramientas de depuración adicionales.

joan
fuente
Ya pensaba que los recursos compartidos de red eran una posibilidad, pero aún así me obliga a ir a Pi, iniciar y detener cada vez, y nunca permitirá la depuración.
J4N
2
@ J4N Normalmente, tengo una ventana de terminal SSH permanente abierta en la computadora portátil para el Pi. Entonces, ejecutar el script sería solo flecha hacia arriba, volver. No he tenido problemas de depuración. Como digo, la traza inversa proporcionará mucha información y para cualquier otra cosa, algunas impresiones dispersas alrededor del script generalmente encuentran el problema.
joan