Desenvolver um script python Raspberry a partir do Windows

10

Quero desenvolver um script python Raspberry do lado do Windows, por várias razões: quero manter todo o código (mais) seguro no meu computador, caso frite o RPi / tente outro projeto / reinstale o Pi. Além disso, meu computador principal com as duas telas está no Windows e acho que usar o vim sobre SSH (com massa de vidraceiro) não é uma boa maneira de fazê-lo (opinião pessoal, mas não acho ergonômico).

Encontrei o seguinte: http://visualgdb.com/tutorials/raspberry/, que parece me permitir desenvolver um aplicativo C + para o Raspberry, compilá-lo remotamente e assim por diante.

Existe algo equivalente para o desenvolvimento de scripts python?

O que basicamente me permitiria:

  1. Para desenvolver em python no meu windows
  2. Para pressionar o botão "executar" e implantar o (s) script (s) no RPi e iniciar
  3. (Solução dos sonhos) Colocar pontos de interrupção e depuração?
J4N
fonte
Você pode considerar usar um sistema CM, como Git, Mercurial ou SVN. Eu pessoalmente prefiro mercurial e com ele você pode empurrar as alterações da sua máquina Windows e puxá-las para o raspberry pi.
21815 James Mertz
Eu tenho atualmente um Git, mas isso não é realmente a questão aqui
J4N
Daí porque este é um comentário e não uma resposta;)
James Mertz
Suficiente Fair :) Desculpe
J4N

Respostas:

4

Confira PyCharm . Sou um cliente pagador feliz há anos, no entanto, uma edição gratuita da comunidade também está disponível.

Há um plug-in do observador de arquivos que copiará os arquivos para uma máquina remota (seu RPi). E tem a capacidade de executar depuração remota .

conecte os módulos de depuração

No que diz respeito à configuração da depuração remota PyCharm, a primeira coisa a fazer é conectar pycharm-debug.egg. Estou em um Mac e, no meu caso, o arquivo está em /Applications/PyCharm.app/Contents/debug-eggs/pycharm-debug.egg. Copiei para o meu RPi com o comando:

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

Este arquivo precisa estar em algum lugar no caminho do Python para ser encontrado. Procurei um local adequado executando o seguinte:

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

A partir dessa lista, acredito que /usr/local/lib/python2.7/dist-packages/seja mais adequado (porque está dentro /usr/local), então:

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

E precisamos de um .ptharquivo para injetá-lo no caminho:

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

Por fim, verifique a configuração:

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

Legal, os módulos de depuração estão conectados. Em para depurar um script. Vou depurar o script do ouvinte que escrevi para este post .

Configuração do PyCharm

No PyCharm, vá para Run -> Edit Configurations...

Bata no +sinal no canto superior esquerdo e selecione Python Remote Debug. Simplesmente dê um nome remote debuge pronto! aperte ok.

configuração de depuração remota

Agora clique em Run -> Debug 'remote debug'e você verá uma mensagem no console de depuração,Use the following code to connect to the debugger

Copie as linhas, no meu caso elas acabaram assim:

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

Cole-os na parte superior do arquivo que você está depurando e salve o arquivo.

Sem usar o plug-in de sincronização de arquivos, copio os arquivos usando o rsync:

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

Agora, observe a configuração diz localhost. A melhor maneira de conectar o depurador é usar os recursos de encaminhamento de porta do SSH para que o RPi possa estar em sua mesa ou ao redor do mundo e funcione da mesma maneira. SSH no RPi usando este comando para vincular a porta remota à porta local:

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

PyCharm deve mostrar uma mensagem Waiting for process connection...

aguardando conexão do processo

No RPi, execute o programa e você verá o depurador entrar. Por padrão, ele pausa na linha logo após a linha pydevd, que você pode alterar na configuração, se desejar.

E nesse ponto você está depurando remotamente! :)

ponto de interrupção no script remoto

berto
fonte
Vou dar uma olhada, já tenho ReSharper por um tempo :)
J4N
Você poderia dar um tutorial ou uma breve visão geral de como configurar o PyCharm para depuração remota no pi? Tenho tido problemas para fazê-lo funcionar.
21815 James Mertz
A resposta foi atualizada com uma visão geral da depuração remota. @KronoS
berto
1

Uma opção é simplesmente armazenar seus scripts Python em uma unidade de rede.

Por exemplo, mantenho todo o meu código em um laptop (com backup adequado) em um diretório chamado code. Eu exporto o diretório para a rede usando o NFS.

No Pi, o diretório NFS do laptop é mapeado para / code.

Isso me permite desenvolver no laptop (ou Pi) e executar o script no Pi simplesmente ssh'ing no Pi e usando /code/script.py.

Geralmente, acho que o Python revela o suficiente sobre os meus erros com seu backtrace para que eu não precise de ferramentas de depuração adicionais.

joan
fonte
Eu já pensei que os compartilhamentos de rede eram uma possibilidade, mas ainda assim eu precisava que eu seguisse o Pi, iniciasse e parasse todas as vezes, e nunca permitirá a depuração.
J4N 10/07
2
@ J4N Normalmente, eu tinha uma janela de terminal SSH permanente aberta no laptop para o Pi. Portanto, a execução do script seria apenas seta para cima, retorne. Não tive problemas para depurar. Como eu disse, o backtrace fornecerá muitas informações e, para qualquer outra coisa, algumas impressões espalhadas pelo script geralmente encontram o problema.
Joan