Phát triển một kịch bản python Raspberry từ một cửa sổ


10

Tôi muốn phát triển tập lệnh python Raspberry từ phía windows, vì một số lý do: Tôi muốn giữ tất cả mã (hơn) trên máy tính của mình, trong trường hợp tôi rán RPi / thử một dự án khác / cài đặt lại Pi. Ngoài ra, máy tính chính của tôi có hai màn hình nằm trên windows và tôi thấy rằng sử dụng vim qua SSH (với putty) không phải là một cách tốt để làm điều đó (ý kiến ​​cá nhân, nhưng tôi không thấy nó thuận tiện).

Tôi đã tìm thấy điều này: http://visualgdb.com/tutorials/raspberry/ dường như cho phép tôi phát triển ứng dụng C + cho Raspberry, biên dịch nó từ xa, v.v.

Có một cái gì đó tương đương cho sự phát triển kịch bản python?

Về cơ bản sẽ cho phép tôi:

  1. Để phát triển python trên windows của tôi
  2. Để nhấn nút "chạy" và triển khai (các) tập lệnh tới RPi và khởi chạy
  3. (Giải pháp giấc mơ) Để đặt điểm dừng và gỡ lỗi?

Bạn có thể cân nhắc sử dụng hệ thống CM như Git, Mercurial hoặc SVN. Cá nhân tôi thích đồng bóng và với nó, bạn có thể đẩy các thay đổi từ máy windows của mình và kéo chúng vào pi mâm xôi.
James Mertz

Tôi hiện đang có Git, nhưng đây không thực sự là câu hỏi ở đây
J4N

Do đó, tại sao đây là một nhận xét và không phải là một câu trả lời;)
James Mertz

Đủ công bằng :) Xin lỗi
J4N

Câu trả lời:


4

Kiểm tra PyCharm . Tôi đã là một khách hàng trả tiền hạnh phúc trong nhiều năm, tuy nhiên cũng có sẵn phiên bản cộng đồng miễn phí .

Có một plugin xem tập tin sẽ sao chép các tập tin vào một máy từ xa (RPi của bạn). Và nó có khả năng thực hiện sửa lỗi từ xa .

nối dây các mô-đun gỡ lỗi

Đối với việc thiết lập gỡ lỗi từ xa PyCharm, điều đầu tiên cần làm là nối dây pycharm-debug.egg. Tôi đang sử dụng máy Mac và trong trường hợp của tôi, tập tin đang ở /Applications/PyCharm.app/Contents/debug-eggs/pycharm-debug.egg. Tôi đã sao chép nó vào RPi của mình bằng lệnh:

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

Tệp này cần phải ở đâu đó trong đường dẫn của Python để tìm thấy nó. Tôi đã tìm một nơi phù hợp bằng cách chạy như sau:

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

Từ danh sách đó tôi tin /usr/local/lib/python2.7/dist-packages/là phù hợp nhất (vì nó nằm trong /usr/local), vì vậy:

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

Và chúng ta cần một .pthtập tin để đưa nó vào đường dẫn:

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

Cuối cùng, xác minh thiết lập:

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

Thật tuyệt, các mô-đun gỡ lỗi được nối dây. Bật để gỡ lỗi một tập lệnh. Tôi sẽ gỡ lỗi kịch bản người nghe tôi đã viết cho bài viết này .

Thiết lập PyCharm

Trong PyCharm, đi đến Run -> Edit Configurations...

Nhấn +dấu ở phía trên bên trái và chọn Python Remote Debug. Đơn giản chỉ cần đặt tên cho nó, remote debugvà bạn đã hoàn thành ở đây; nhấn ok

cấu hình gỡ lỗi từ xa

Bây giờ bấm vào Run -> Debug 'remote debug'và bạn sẽ thấy một thông báo trong bảng điều khiển gỡ lỗi,Use the following code to connect to the debugger

Sao chép các dòng, trong trường hợp của tôi cuối cùng chúng trông như thế này:

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

Dán chúng ở đầu tệp bạn đang gỡ lỗi và lưu tệp.

Không sử dụng plugin đồng bộ hóa tệp, tôi sao chép các tệp bằng rsync:

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

Bây giờ, chú ý cấu hình nói localhost. Cách tốt nhất để kết nối với trình gỡ lỗi là sử dụng các khả năng chuyển tiếp cổng của SSH để RPi có thể ở trên bàn của bạn hoặc trên toàn cầu và nó hoạt động theo cùng một cách. SSH vào RPi bằng lệnh này để liên kết cổng từ xa với cổng cục bộ:

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

PyCharm sẽ hiển thị cho bạn một tin nhắn Waiting for process connection...

chờ kết nối quá trình

Trên RPi, chạy chương trình và bạn sẽ thấy trình gỡ lỗi khởi động. Theo mặc định, nó tạm dừng trên dòng ngay sau dòng pydevd, bạn có thể thay đổi cấu hình nếu muốn.

Và tại thời điểm đó, bạn đang gỡ lỗi từ xa! :)

điểm dừng trên tập lệnh từ xa


Tôi sẽ xem xét, tôi đã có Resharper một thời gian rồi :)
J4N

Bạn có thể đưa ra một hướng dẫn hoặc tổng quan ngắn gọn về cách thiết lập PyCharm để gỡ lỗi từ xa trên pi không? Tôi đã có vấn đề làm cho nó hoạt động.
James Mertz

Câu trả lời đã được cập nhật với một tổng quan gỡ lỗi từ xa. @KronoS
Berto

1

Một tùy chọn đơn giản là lưu trữ tập lệnh Python của bạn trên ổ đĩa mạng.

Chẳng hạn, tôi giữ tất cả mã của mình trên máy tính xách tay (được sao lưu phù hợp) trong một thư mục gọi là mã. Tôi xuất thư mục vào mạng bằng NFS.

Trên Pi, thư mục NFS của máy tính xách tay được ánh xạ tới / code.

Điều đó cho phép tôi phát triển trên máy tính xách tay (hoặc Pi) và chạy tập lệnh trên Pi chỉ bằng cách ssh'ing với Pi và sử dụng /code/script.py.

Nói chung, tôi thấy rằng Python tiết lộ đủ về các lỗi của tôi với phần nền của nó để tôi không cần các công cụ sửa lỗi bổ sung.


Tôi đã nghĩ rằng chia sẻ mạng là một khả năng, nhưng nó vẫn yêu cầu tôi tiếp tục Pi, khởi chạy và dừng mọi lúc, và sẽ không bao giờ cho phép gỡ lỗi.
J4N

2
@ J4N Tôi thường có một cửa sổ đầu cuối SSH vĩnh viễn mở trên máy tính xách tay cho Pi. Vì vậy, chạy tập lệnh sẽ chỉ là mũi tên lên, trở lại. Tôi không gặp vấn đề gì khi gỡ lỗi. Như tôi nói, backtrace sẽ cung cấp nhiều thông tin và cho bất cứ điều gì khác, một vài bản in rải rác xung quanh kịch bản thường tìm thấy vấn đề.
joan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.