- Pythonプログラミング環境構築についてどれを使えば良いか調べる
- pyenvをインストールする
- pyenvでPythonをインストールする
- pipで必要なPythonパッケージをインストール
- 自分用のPython専用フォルダ作成し、パーミッション設定しておく
- 簡単なPythonコードでHello World
- requirements.txtを使うとpipパッケージの一括アップデートが超楽
- ラズパイとパソコン間でファイルのコピーや移動を行う
- VSCodeの拡張機能をインストールして、インテリセンスが使えるようにする
- VSCode拡張機能のインストール先はどこ?
- まとめ
【目次】
06.簡単なPythonコードでHello World
では、ようやくPythonプログラミングの段階に入って来ました。
プログラミングではお馴染みの「Hello World」を表示させる簡単なPythonコードを組んで実行させていきます。
06-01. テスト用Pythonコードを作成し、実行してみる
次に、下図の様にVSCodeのリモートエクスプローラーを使って、mypy
フォルダに新たにtest.py
というファイルを作成しておきます。
(図006-01)
すると、右側のエディタで、test.py
ファイルにテキスト入力できるようになるので、下図の様にprint(“Hello World”)
とPythonコードを入力し、上書き保存しておきます。
(図006-02)
では、ターミナルに移って、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)
次に、requirements.txt
に必要なPythonパッケージを入力します。
先ほど、pipでインストールしたwheel
やsomepackage
も入力しておき、上書き保存しておきます。
numpy somepackage wheel
(図007-02_1)
そうしたら、ターミナルに行き、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)
すると、下図の様にパソコンのダウンロード先を聞いてくるので、好きなフォルダを指定してダウンロードします。
すると、下図の様に先ほど作成したmypy
フォルダ毎ダウンロードされていて、test.py
ファイル、requirements.txt
ファイルも存在することが分かります。
では、今度はパソコンで作成したファイルをラズパイへ保存する方法を説明します。
これも超簡単です。
下図の様にWindowsパソコンのエクスプローラー上から対象ファイルをVSCodeのリモートエクスプローラー上の対象フォルダへドラッグアンドドロップすればコピーできます。
(図008-04)
以上、VSCode上で、ラズパイとパソコン間のファイル操作方法でした。
簡単でしたね。
09.VSCodeの拡張機能をインストールして、インテリセンスが使えるようにする
プログラミングの量が多くなると、誤字や打ち間違い、うっかりミスが多くなってきます。
そこでVSCodeの拡張機能にはPythonプログラミングのミスを減らしてくれるインテリセンスという入力支援機能があります。
これはとっても便利で、余計なミスによって時間を浪費することが減らせます。
09-01. 拡張機能Pythonのインストール
まずは、下図の様にVSCodeの拡張機能アイコンをクリックし、「python」と入力します。
そして、Microsoft公式の「Python」という拡張機能をインストールします。
これは、推奨機能としてメッセージが出ていたやつです。
(図009-01)
インストール完了すると、下図のようになります。
(図009-02)
以前は「Pylance」という拡張機能をインストールしていましたが、2023/2月時点ではPythonにPylanceも含まれていましたね。
では、先に紹介したようにPythonコードを入力してみます。
すると、下図の様に文字を入力する毎に近い単語が表示されます。
(図009-03)
上図のように、誤った単語を入力するとインテリセンスで一覧表示されている単語と異なっているのが一発でわかりますね。
そこで、その単語をクリックするだけで単語を修正してくれるんです。
これは本当に便利だと思いますね。
そして、次に下図の様に「array」のところにマウスカーソルを当てると、右側に「>」というマークが現れるので、それをクリックします。
(図009-04)
すると、下図の様に「array」の定義詳細が表示されます。
これも関数の引数が一発でわかって、とても便利ですね。スゲェ機能です。
(図009-05)
その他にもいろいろ機能があるようですが、とりあえず触りだけ紹介しました。
もうこれでVSCodeからは離れられなくなりますね。
09-02. Pythonパッケージimportで、波線が出た時の対処
さて、今度はPythonコードでパッケージをimportする時に、下図の様に波線が出る場合があります。
この場合は先ほどインストールしたはずのnumpyに波線が出ています。
(図009-10)
このところに下図の様にマウスカーソルを当てて、「問題の表示」というところをクリックします。
(図009-11)
すると、下図の様に表示されます。
(図009-12)
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)
すると、下図の様に上の方にインタープリターの選択画面が出てくるので、「インタープリター パスを入力」をクリックします。
(図009-14)
すると、下図の様な画面になるので、「検索」をクリックします。
(図009-15)
すると、下図の様な画面になるので、「..」をクリックします。
(図009-16)
次に、下図の様に「.pyenv」をクリックします。
(図009-17)
次に下図の様に下にスクロールして「versions」をクリックします。
(図009-18)
すると、下図の様にpyenvでインストールしたバージョンが出てくるので、それをクリックします。
(図009-19)
次に「bin」をクリックします。
(図009-20)
次に、下図の様に「python3.10」をクリックします。
(図009-21)
これで、下図の様にVSCodeの右下の水色のアンダーバーの所に「Python 3.10.10」と表示されればOKです。
(図009-22)
すると、ちょと間を置いて反映されて、下図の様にソースコードのnumpyの所が緑色に変わり、波線が消えていると思います。
(図009-23)
これでたぶん拡張機能の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サーバーを作っていきたいと思います。
ではまた…。
コメント