Sviluppa uno script Raspberry Python da Windows


10

Voglio sviluppare uno script Raspberry Python dal lato di Windows, per diversi motivi: voglio mantenere tutto il codice (più) sicuro sul mio computer, nel caso in cui avessi fritto RPi / provassi un altro progetto / reinstallassi il Pi. Anche il mio computer principale con i due schermi è su Windows e trovo che usare Vim su SSH (con stucco) non sia un buon modo di farlo (opinione personale, ma non lo trovo ergonomico).

Ho trovato questo: http://visualgdb.com/tutorials/raspberry/ che mi permette di sviluppare un'applicazione C + per Raspberry, compilarla in remoto e così via.

Esiste qualcosa di equivalente per lo sviluppo di script Python?

Il che sostanzialmente mi permetterebbe:

  1. Per sviluppare in Python sulle mie finestre
  2. Premere il pulsante "Esegui" e distribuire gli script nell'RPi e lanciarli
  3. (Soluzione da sogno) Mettere breakpoint e debug?

Puoi prendere in considerazione l'utilizzo di un sistema CM come Git, Mercurial o SVN. Personalmente preferisco mercurial e con esso puoi spingere le modifiche dal tuo computer Windows e inserirle nel raspberry pi.
James Mertz,

Al momento ho un Git, ma questa non è proprio la domanda qui
J4N,

Ecco perché questo è un commento e non una risposta;)
James Mertz,

Abbastanza giusto :) Mi dispiace
J4N

Risposte:


4

Dai un'occhiata a PyCharm . Sono stato un felice cliente pagante per anni, tuttavia è disponibile anche un'edizione comunitaria gratuita.

Esiste un plug-in di controllo file che copia i file su un computer remoto (il tuo RPi). E ha la capacità di eseguire il debug remoto .

collegare i moduli di debug

Per quanto riguarda l'impostazione del debug remoto di PyCharm, la prima cosa da fare è collegare pycharm-debug.egg. Sono su un Mac e nel mio caso il file è su /Applications/PyCharm.app/Contents/debug-eggs/pycharm-debug.egg. L'ho copiato sul mio RPi con il comando:

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

Questo file deve trovarsi da qualche parte nel percorso di Python per poter essere trovato. Ho cercato un posto adatto eseguendo quanto segue:

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

Da quell'elenco credo /usr/local/lib/python2.7/dist-packages/sia il più adatto (perché è presente /usr/local), quindi:

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

E abbiamo bisogno di un .pthfile per iniettarlo nel percorso:

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

Infine, verifica l'installazione:

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

Bene, i moduli di debug sono collegati. Attivare il debug di uno script. Eseguirò il debug dello script dell'ascoltatore che ho scritto per questo post .

Configurazione di PyCharm

In PyCharm, vai a Run -> Edit Configurations...

Premi il +segno in alto a sinistra e seleziona Python Remote Debug. Dagli semplicemente un nome remote debuge il gioco è fatto qui; colpisci ok.

configurazione di debug remoto

Ora fai clic su Run -> Debug 'remote debug'e vedrai un messaggio nella console di debug,Use the following code to connect to the debugger

Copia le righe, nel mio caso sono finite così:

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

Incollali nella parte superiore del file di cui stai eseguendo il debug e salva il file.

Senza usare il plugin di sincronizzazione dei file copio i file usando rsync:

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

Ora, nota la configurazione dice localhost. Il modo migliore per eseguire il cablaggio del debugger è utilizzare le funzionalità di port forwarding di SSH in modo che l'RPi possa essere sulla tua scrivania o in tutto il mondo e funzioni allo stesso modo. SSH in RPi usando questo comando per collegare la porta remota alla porta locale:

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

PyCharm dovrebbe mostrarti un messaggio Waiting for process connection...

in attesa di connessione al processo

Sull'RPi, esegui il programma e vedrai il debugger avviarsi. Per impostazione predefinita, fa una pausa sulla linea subito dopo la linea pydevd, che puoi modificare nella configurazione se lo desideri.

E a quel punto esegui il debug in remoto! :)

punto di interruzione su script remoto



Potresti forse dare un tutorial o una breve panoramica di come impostare PyCharm per il debug remoto sul pi? Ho avuto problemi a farlo funzionare.
James Mertz,

La risposta è stata aggiornata con una panoramica del debug remoto. @KronoS
berto

1

Un'opzione è semplicemente archiviare gli script Python su un'unità di rete.

Ad esempio, tengo tutto il mio codice su un laptop (opportunamente sottoposto a backup) in una directory chiamata code. Esporto la directory nella rete usando NFS.

Su Pi la directory NFS del laptop è mappata su / code.

Ciò mi consente di sviluppare sul laptop (o Pi) ed eseguire lo script sul Pi semplicemente inviando un messaggio al Pi e usando /code/script.py.

Generalmente trovo che Python rivela abbastanza dei miei errori con la sua backtrace per non aver bisogno di ulteriori strumenti di debug.


Ho già pensato che le condivisioni di rete fossero una possibilità, ma mi impone comunque di andare sul Pi, lanciarlo e fermarlo ogni volta, e non consentirò mai il debug.
J4N,

2
@ J4N In genere avrei una finestra terminale SSH permanente aperta sul laptop al Pi. Quindi eseguire lo script sarebbe solo freccia in su, ritorno. Non ho avuto problemi di debug. Come ho già detto, il backtrace fornirà molte informazioni e per qualsiasi altra cosa alcune stampe sparse per la sceneggiatura di solito trovano il problema.
Giovanna,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.