ラズパイ(Ubuntu Server)とVSCodeでPythonプログラミング環境構築する(備忘録)

ラズパイ(Ubuntu Server)とVSCodeでPythonプログラミング環境構築する(備忘録) Raspberry Pi (ラズパイ)

    【目次】

  1. Pythonプログラミング環境構築についてどれを使えば良いか調べる
  2. pyenvをインストールする
  3. pyenvでPythonをインストールする
  4. pipで必要なPythonパッケージをインストール
  5. 自分用のPython専用フォルダ作成し、パーミッション設定しておく
  6. 簡単なPythonコードでHello World
  7. requirements.txtを使うとpipパッケージの一括アップデートが超楽
  8. ラズパイとパソコン間でファイルのコピーや移動を行う
  9. VSCodeの拡張機能をインストールして、インテリセンスが使えるようにする
  10. VSCode拡張機能のインストール先はどこ?
  11. まとめ

06.簡単なPythonコードでHello World

では、ようやくPythonプログラミングの段階に入って来ました。
プログラミングではお馴染みの「Hello World」を表示させる簡単なPythonコードを組んで実行させていきます。

06-01. テスト用Pythonコードを作成し、実行してみる

次に、下図の様にVSCodeのリモートエクスプローラーを使って、mypy フォルダに新たにtest.py というファイルを作成しておきます。

(図006-01)

VSCodeのリモートエクスプローラーでtest.pyというファイルを作成

VSCodeのリモートエクスプローラーでtest.pyというファイルを作成

すると、右側のエディタで、test.py ファイルにテキスト入力できるようになるので、下図の様にprint(“Hello World”) とPythonコードを入力し、上書き保存しておきます。

(図006-02)

test.pyファイルに簡単なPythonコードを入力

test.pyファイルに簡単なPythonコードを入力

では、ターミナルに移って、CD コマンドでmypy フォルダに移動しておきます。

~$ cd mypy
~/mypy$

では、いよいよtest.py ファイルをPythonで実行してみます。
以下のようにコマンドを打ちます。

~/mypy$ python test.py
Hello World

やったー!
これで最低限のラズパイ Ubuntu のPython環境が整いました。

06-02. numpyを使ってみたがパッケージが無い

では、Pythonプログラミングには欠かせないnumpyライブラリを使った簡単なコードをtest.pyに入力して保存しておきます。

import numpy as np
x = np.array([1,2,3])
print(x)

そして、ターミナルで実行してみます。

~/mypy$ python test.py
Traceback (most recent call last):
File "/home/xxxxxx/mypy/test.py", line 1, in <module>
import numpy as np
ModuleNotFoundError: No module named 'numpy'

ということで、pip でsamepackageやsetuptoolsをインストールしたからといってnumpyまでインストールされているわけでは無いということが分かりました。

07.requirements.txtを使うとpipパッケージの一括アップデートが超楽

前節のように、numpyパッケージが無ければ、通常はpip install numpyというようにインストールします。

ただ、pyenvでPythonの複数バージョンをインストールしたり、Ubuntuやpyenvを再インストールした場合には、いちいち最初からpip install コマンドで1つずつインストールするのはアホらしいですよね。
それに、パッケージが多くなった場合、いちいちpipでアップデートするのは大変ですよね。

その場合、requirements.txt ファイルにインストールしたいパッケージを記述しておけば、それをそのまま使って新しい環境でパッケージを一括インストールできるんです。
以下の公式サイトを参考に進めていきます。

https://pip.pypa.io/en/stable/reference/requirements-file-format/#requirements-file-format

07-01. requirements.txtの作成

まず、下図の様にVSCodeのリモートエクスプローラーで先ほど作成したmypy フォルダ中に新しいファイルでrequirements.txt というテキストファイルを作成します。

(図007-01)

VSCodeのリモートエクスプローラーでrequirements.txtファイルを作成

VSCodeのリモートエクスプローラーでrequirements.txtファイルを作成

次に、requirements.txt に必要なPythonパッケージを入力します。
先ほど、pipでインストールしたwheelsomepackage も入力しておき、上書き保存しておきます。

numpy
somepackage
wheel

(図007-02_1)

requirements.txtにインストールしたいパッケージ名を入力して保存する。

requirements.txtにインストールしたいパッケージ名を入力して保存する。

そうしたら、ターミナルに行き、CDコマンドでrequirements.txt を保存したフォルダに移っておき、以下のコマンドでpipインストールします。

~/mypy$ python -m pip install -r requirements.txt
Collecting numpy
Downloading numpy-1.24.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (14.0 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 14.0/14.0 MB 7.4 MB/s eta 0:00:00
Requirement already satisfied: somepackage in /home/xxxxxx/.pyenv/versions/3.10.10/lib/python3.10/site-packages (from -r requirements.txt (line 2)) (1.2.3)
Requirement already satisfied: wheel in /home/xxxxxx/.pyenv/versions/3.10.10/lib/python3.10/site-packages (from -r requirements.txt (line 3)) (0.38.4)
Installing collected packages: numpy
Successfully installed numpy-1.24.2

このように、重複したパッケージはRequirement already satisfied と表示されるので安心ですね。
そして、システムPythonではなくpyenvのフォルダにインストールされていることがわかります。

では、numpyがちゃんと動作するか、以下のコマンドで先ほど作ったtest.pyをPythonで実行してみます。

~/mypy$ python test.py
[1 2 3]

やったぜ!
numpyを使ったソースコードも実行できました。

これで、今後インストールしたいパッケージをrequirements.txt に記述して、python -m pip install -r requirements.txt 又はpip install -r requirements.txtで一括インストールしてくれるわけです。

では、pip check で全てのパッケージに互換性のある依存関係があるかどうかチェックします。

~/mypy$ pip check
No broken requirements found.

このメッセージは間違えやすいのですが、正常ならばNo broken requirements found. と表示されます。つまりこれはOKということです。

07-02. requirements.txtでパッケージの一括アップデート

では、requirements.txtにあるパッケージを一括アップデートしていきます。
以下のように入力します。

pip install -r requirements.txt -U

(結果)

~/mypy$ pip install -r requirements.txt -U
Requirement already satisfied: numpy in /home/xxxxxx/.pyenv/versions/3.10.10/lib/python3.10/site-packages (from -r requirements.txt (line 1)) (1.24.2)
Requirement already satisfied: somepackage in /home/xxxxxx/.pyenv/versions/3.10.10/lib/python3.10/site-packages (from -r requirements.txt (line 2)) (1.2.3)
Requirement already satisfied: wheel in /home/xxxxxx/.pyenv/versions/3.10.10/lib/python3.10/site-packages (from -r requirements.txt (line 3)) (0.38.4)

この場合は全て最新版でしたね。
ちなみにこれにはsetuptoolsは含まれていません。
その場合、ネットの情報では以下のコマンドを使うとpipのリストをrequirements.txt に書き出すことがでるとありました。

pip freeze > requirements.txt

ただ、この場合、requirements.txt ファイルには以下のようにしか出力されませんでした。

numpy==1.24.2
somepackage==1.2.3

つまり、過去にpip install でインストールしたものしか含まれていないっぽいです。

なんかおかしいなと思い、以下のようにlistコマンドとfreezeコマンドを比べてみました。

~/mypy$ pip list
Package     Version
----------- -------
numpy       1.24.2
pip         23.0.1
setuptools  67.4.0
somepackage 1.2.3
wheel       0.38.4

~/mypy$ pip freeze
numpy==1.24.2
somepackage==1.2.3

ん?なんで違うんだ?

そこで、以下のサイトを参照してみました。
https://qiita.com/syusuke9999/items/59ae222ce395d3df0b73

それによると、freezeではなく、以下のコマンドを使えば全リスト(バージョンも含む)を書き出すことができるそうです。

pip list --format=freeze

(結果)

~/mypy$ pip list --format=freeze
numpy==1.24.2
pip==23.0.1
setuptools==67.4.0
somepackage==1.2.3
wheel==0.38.4

そして、以下のようにすればrequirements.txt に書き出すことが出来ました。

pip list --format=freeze > requirements.txt

これで、現在のバージョンを保持しながら他の環境へ移行することも簡単になりますね。
requirements.txt は便利です。

以上、pip のrequirements.txt についてでした。

08.ラズパイとパソコン間でファイルのコピーや移動を行う

では、これまでにラズパイ上に作成したファイルやフォルダをパソコンへバックアップコピーしていきます。
安心して下さい、これは超簡単です。

まず、先ほど作成したmypy フォルダをフォルダ毎バックアップしようと思います。
下図の様に、VSCodeのリモートエクスプローラーで、対象のフォルダを右クリックし、「ダウンロード」をクリックします。

(図008-01)

VSCodeのリモートエクスプローラーで保存したいフォルダを右クリックでダウンロードできる

VSCodeのリモートエクスプローラーで保存したいフォルダを右クリックでダウンロードできる

すると、下図の様にパソコンのダウンロード先を聞いてくるので、好きなフォルダを指定してダウンロードします。

(図008-02)

すると、下図の様に先ほど作成したmypy フォルダ毎ダウンロードされていて、test.py ファイル、requirements.txt ファイルも存在することが分かります。

(図008-03)

では、今度はパソコンで作成したファイルをラズパイへ保存する方法を説明します。

これも超簡単です。
下図の様にWindowsパソコンのエクスプローラー上から対象ファイルをVSCodeのリモートエクスプローラー上の対象フォルダへドラッグアンドドロップすればコピーできます。

(図008-04)

パソコンからラズパイへアップロードするにはリモートエクスプローラーのフォルダへドラッグ&ドロップ

パソコンからラズパイへアップロードするにはリモートエクスプローラーのフォルダへドラッグ&ドロップ

以上、VSCode上で、ラズパイとパソコン間のファイル操作方法でした。
簡単でしたね。

09.VSCodeの拡張機能をインストールして、インテリセンスが使えるようにする

プログラミングの量が多くなると、誤字や打ち間違い、うっかりミスが多くなってきます。
そこでVSCodeの拡張機能にはPythonプログラミングのミスを減らしてくれるインテリセンスという入力支援機能があります。
これはとっても便利で、余計なミスによって時間を浪費することが減らせます。

09-01. 拡張機能Pythonのインストール

まずは、下図の様にVSCodeの拡張機能アイコンをクリックし、「python」と入力します。
そして、Microsoft公式の「Python」という拡張機能をインストールします。
これは、推奨機能としてメッセージが出ていたやつです。

(図009-01)

VSCodeの推奨拡張機能としてMicrosoftのPythonをインストール

VSCodeの推奨拡張機能としてMicrosoftのPythonをインストール

インストール完了すると、下図のようになります。

(図009-02)

推奨拡張機能のPythonがインストール完了

推奨拡張機能のPythonがインストール完了

以前は「Pylance」という拡張機能をインストールしていましたが、2023/2月時点ではPythonにPylanceも含まれていましたね。

では、先に紹介したようにPythonコードを入力してみます。
すると、下図の様に文字を入力する毎に近い単語が表示されます。

(図009-03)

インテリセンス機能によってコードの誤りを発見し易い

インテリセンス機能によってコードの誤りを発見し易い

上図のように、誤った単語を入力するとインテリセンスで一覧表示されている単語と異なっているのが一発でわかりますね。
そこで、その単語をクリックするだけで単語を修正してくれるんです。
これは本当に便利だと思いますね。

そして、次に下図の様に「array」のところにマウスカーソルを当てると、右側に「>」というマークが現れるので、それをクリックします。

(図009-04)

インテリセンス表示の単語にマウスカーソルを当てる

インテリセンス表示の単語にマウスカーソルを当てる

すると、下図の様に「array」の定義詳細が表示されます。
これも関数の引数が一発でわかって、とても便利ですね。スゲェ機能です。

(図009-05)

インテリセンスの定義詳細表示

インテリセンスの定義詳細表示

その他にもいろいろ機能があるようですが、とりあえず触りだけ紹介しました。
もうこれでVSCodeからは離れられなくなりますね。

09-02. Pythonパッケージimportで、波線が出た時の対処

さて、今度はPythonコードでパッケージをimportする時に、下図の様に波線が出る場合があります。
この場合は先ほどインストールしたはずのnumpyに波線が出ています。

(図009-10)

VSCodeエディタのPythonパッケージimportでnumpyに波線が出ている

VSCodeエディタのPythonパッケージimportでnumpyに波線が出ている

このところに下図の様にマウスカーソルを当てて、「問題の表示」というところをクリックします。

(図009-11)

波線の単語にマウスカーソルを当てて、「問題の表示」をクリック

波線の単語にマウスカーソルを当てて、「問題の表示」をクリック

すると、下図の様に表示されます。

(図009-12)

Pylanceでnumpy importが解決できないというメッセージ

Pylanceでnumpy importが解決できないというメッセージ

Import "numpy" could not be resolved Pylance

これは、拡張機能Pythonの言語サポートPylanceでnumpyのimportが解決できないというメッセージです。
ということで、解決していきます。

まず、下図の様にVSCodeウィンドウの右下の水色のアンダーバーに表示されているPythonバージョンを見てみます。
すると、何と、Python 3.10.6 となっているではないか。今更気付きましたよ!
これは先に述べたように、Ubuntu Server 22.04 のシステムPythonバージョンです。
つまり、VSCodeの拡張機能が認識していたのはpyenvでインストールしたPythonではなかったわけです。
ということで、システムPythonからpyenvのバージョンに切り替えます。

(図009-13)

VSCodeの右下のPythonバージョンをクリック

VSCodeの右下のPythonバージョンをクリック

すると、下図の様に上の方にインタープリターの選択画面が出てくるので、「インタープリター パスを入力」をクリックします。

(図009-14)

インタープリター パスを入力をクリック

インタープリター パスを入力をクリック

すると、下図の様な画面になるので、「検索」をクリックします。

(図009-15)

「検索」をクリック

「検索」をクリック

すると、下図の様な画面になるので、「..」をクリックします。

(図009-16)

「..」をクリック

「..」をクリック

次に、下図の様に「.pyenv」をクリックします。

(図009-17)

「.pyenv」をクリック

「.pyenv」をクリック

次に下図の様に下にスクロールして「versions」をクリックします。

(図009-18)

「versions」をクリック

「versions」をクリック

すると、下図の様にpyenvでインストールしたバージョンが出てくるので、それをクリックします。

(図009-19)

pyenvでインストールしたPythonバージョンをクリック

pyenvでインストールしたPythonバージョンをクリック

次に「bin」をクリックします。

(図009-20)

「bin」をクリック

「bin」をクリック

次に、下図の様に「python3.10」をクリックします。

(図009-21)

python3.10 をクリック

python3.10 をクリック

これで、下図の様にVSCodeの右下の水色のアンダーバーの所に「Python 3.10.10」と表示されればOKです。

(図009-22)

右下のアンダーバーにPython 3.10.10と表示されればOK

右下のアンダーバーにPython 3.10.10と表示されればOK

すると、ちょと間を置いて反映されて、下図の様にソースコードのnumpyの所が緑色に変わり、波線が消えていると思います。

(図009-23)

波線が消えて、numpyが緑色になる

波線が消えて、numpyが緑色になる

これでたぶん拡張機能のPythonとPylanceはちゃんと動いてくれるのかと思われます。

10.VSCode拡張機能のインストール先はどこ?

ところで、先ほどインストールした拡張機能はどこにインストールされるんでしょうか?

いろいろ調べたところ、VSCodeをラズパイにSSHリモート接続してインストールした拡張機能は以下のパスでした。

/home/ユーザー名/.vscode-server/extensions

つまり、ラズパイ側にインストールされてしまうので、32GB程度のmicro SDカードでラズパイをインストールしてしまうと、すぐに容量がひっ迫しそうですね。
今回は大容量のSSDドライブブートに変更しておいて正解でした。

また、前回記事でインストールしたSSH Remote Development拡張機能は、Windowsパソコン側の以下のパスにインストールされていました。

C:\Users\ユーザー名\.vscode\extensions

拡張機能はディスク容量を圧迫するので、必要最低限に留めておきたいところですね。

まとめ

以上、ラズパイとVSCodeとのSSHリモート接続で、Python環境を構築する方法の備忘録でした。

こうやってみると、Arduino IDEに比べてとんでもなく複雑かつ面倒で、しかも意味不明な環境構築が多いことがわかりますね。
そもそも、Pythonのバージョンやインストールパッケージなど、あまりに多種多様な方法があり過ぎるんですよね。
こんなの、初心者ならば絶対挫折するレベルです。

もしかしたら、Ubuntu Serverではなく、RasbianやJupyter Notebookならばもっと簡単にPython環境は構築できたかも…。

いずれにしても、自分にとっては2回目の環境構築なので、かなり理解が深まりました。
次回はいよいよPythonプログラミングでWebサーバーを作っていきたいと思います。

ではまた…。

コメント

タイトルとURLをコピーしました