みつきんのメモ

組み込みエンジニアです。Interface誌で「Yocto Projectではじめる 組み込みLinux開発入門」連載中

Yocto Project VS Code連携機能を試す(Python)

はじめに

前回ではVS CodeC/C++プログラムをデバッグする機能をためした。 今回はPythonのプログラムのデバッグを試してみる。

ベースの環境は前回のものを使用する。

pythonプログラム

poetry

pythonのパッケージを作成するには自前でsetup.pyなどを書く必要があるが、 python初心者からするととても分かりづらいし面倒くさい。

Rustのcargoのように簡単にプロジェクトを作成するためのツールとしてpoetryというものがある。

Yocto Projectのdevtoolやrecipetoolはpoetryで作成したプロジェクトからレシピを生成できるため今回はpoetryを使用する。

下記のコマンドでインストールする。

$ pip3 install --user poetry

プロジェクトの作成

looptestという名前でプロジェクトを作成する。

$ poetry new looptest
$ cd looptest

pyproject.tomlにpackagesの行(7行目)を追加する。

 1 [tool.poetry]
 2 name = "looptest"
 3 version = "0.1.0"
 4 description = "test program"
 5 authors = ["Yusuke Mitsuki <mickey.happygolucky@gmail.com>"]
 6 readme = "README.md"
 7 packages = [{include = "looptest"}]
 8 
 9 [tool.poetry.dependencies]
10 python = "^3.10"
11 
12 
13 [build-system]
14 requires = ["poetry-core"]
15 build-backend = "poetry.core.masonry.api"

プログラムの作成

looptest/main.pyを作成

for i in range(10):
    if i % 2 == 0:
        print(i, "is even")
    else:
        print(i, "is odd")

gitリポジトリの作成

devtoolを使用する上ではgitリポジトリにするほうが都合が良いので、gitリポジトリにする。

$ git init
$ git branch -m
$ git add .
$ git commit -m 'initial'

ベアリポジトリの作成

$ sudo mkdir -p /opt/repos/looptest.git
$ sudo chmod 777 /opt/repos/looptest.git
$ cd /opt/repos/looptest.git
$ git init --bare --shared

プロジェクトをpush。今回はlocalhostにしているが、sshで接続できればリモートのURLを設定しても良い。 自作のプログラムをリモートリポジトリとして扱うにはこの方法が簡単。

$ git remote add example ssh://localhost:/opt/repos/looptest.git
$ git push example main

VS Codeによるデバッグ

レシピ作成

VS Codeデバッグするためにレシピをworkspaceに展開する。

$ devtool add ssh://localhost:/opt/repos/looptest.git -B main

devtoolがPythonのプログラムと認識すると作成されるレシピ名のプリフィックスpython3-が自動的に付与されるため、 レシピ名は「python3-looptest」となる。

VS Codeの設定ファイル

VS Codeデバッグするための設定ファイルを作成する。

$ devtool ide-sdk python3-looptest core-image-base --target root@192.168.7.2

デバッグ

VS Codeでプロジェクトを開く

$ code workspace/sources/python3-looptest

VS Codeデバッグ開始の操作をすると、Pythonスクリプトもリモートデバッグすることができる。

まとめ

PythonのプログラムについてもVS Codeと連携してリモートデバッグが実行できる。

下記の流れの操作がシームレスに行えるためデバッグの効率はかなり上がるのではないだろうか。

scarthgapになって、devtoolを積極的に使用する理由ができたような気がする。