ラズパイ(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. まとめ

03.pyenvでPythonをインストールする

では、pyenv で自分の使いたいpythonバージョンをインストールしていきます。
先ほど調べたように、2023/2月時点では3.10系が最適と決定したので、その最新版はPython 3.10.10でした。
それをpyenv install 3.10.10 コマンドでインストールするのですが、以下のサイトを参考にすると、

https://blog.amedama.jp/entry/pyenv-ubuntu

このようなコマンドを使うと便利だということがわかりました。

pyenv install -v 3.10.10 2>&1 | tee build.log

2>&1 というのは、標準出力とエラー出力をマージするという意味で、tee コマンドは標準出力、つまりターミナルに出力表示するのと、ファイル出力の両方行うというコマンドです。

すると、/home/ユーザー名 フォルダにbuild.log というファイルが作られ、そこにpyenvによるビルドのログが書き込まれます。
インストール終了したら、build.log ファイルを開いてnecessary というキーワードで検索をかけると、以下の様なメッセージが出ていました。

The necessary bits to build these optional modules were not found:
_dbm                  _gdbm
To find the necessary bits, look in setup.py in detect_modules() for the module's name.

(翻訳)

これらのオプション モジュールを構築するために必要なビットが見つかりませんでした:
_dbm _gdbm
必要なビットを見つけるには、detect_modules() の setup.py でモジュールの名前を調べます。

ただ、setup.py ファイルを探しても、_dbm_gdbm のモジュール名はわかりませんでした。
また、ネット検索してもいまいちよくわかりませんでした。

そこで、Chat GPTに聞いてみました。

(図03-01)

Chat GPTにエラーメッセージからモジュール名を聞き出す

Chat GPTにエラーメッセージからモジュール名を聞き出す

改めてChat GPT ってスゴイっすね~。
ググるより早く解決しました。

ということで、_dbmlibgdbm-compat-dev_gdbmlibgdbm-dev というモジュール名が判明しました。
合っているかどうか分かりませんが、Chat GPTを信用して再インストールしてみようと思います。

まず、先ほどインストールしたPython 3.10.10 を削除(アンインストール)します。

~$ pyenv uninstall -f 3.10.10
pyenv: 3.10.10 uninstalled

次に、先ほど検索したモジュールをインストールします。

sudo apt install libgdbm-compat-dev libgdbm-dev

念のため、ラズパイ再起動しておきます。

sodo reboot

再度、以下のコマンド、pyenvでPython 3.10.10 をインストールします。

pyenv install -v 3.10.10 2>&1 | tee build.log

これで再度、build.log を開いて、necessary というキーワードで検索してみると、見つかりませんでした。
その他、failed や、error というキーワードで検索しても、それらしきものは見当たらなかったので、多分インストール成功です。

これで、念のため再起動します。

sudo reboot

再起動し、SSHパスフレーズ入力して起動完了したら、以下のコマンドでPythonのバージョン確認します。

~$ python3 -V
Python 3.10.6

まだシステムPythonのバージョン3.10.6のままですね。

ここで、pyenvによる以下のコマンドでバージョン変更してみます。

pyenv shell 3.10.10

そして、今度は以下のコマンドでPythonのバージョン確認します。

python -V
Python 3.10.10

やった、バージョン変更できた!

因みに、GitHubのPython公式サイトに書いてあるように、pyenv shell を使うと現在のシェルセッションのみ有効になります。
つまり、ターミナルを閉じたり、VSCodeを再起動したりすると使用できるPythonバージョンはシステムPythonのバージョンに戻ってしまいます。
ですから、VSCodeを起動したら、その都度pyenv shell コマンドでバージョン指定しなければいけません。それは面倒ですね。

その他、pyenv local (バージョン) の場合は、現在のディレクトリにいる時だけそのバージョンが有効になります。
また、pyenv global (バージョン) の場合は、ユーザーアカウントに対してそのバージョンが有効になります。

ということで、VSCodeを開いた時、/home/ユーザー名 のフォルダ上でPythonプログラミング行うので、pyenv local (バージョン) を使って反映させてみます。

pyenv local 3.10.10

その後、再起動します。

sudo reboot

そして、パスフレーズ入力して起動したら、以下のコマンドでPythonバージョンを確認します。

~$ python -V
Python 3.10.10

やったぜー!
確実にバージョンが3.10.10 になった!
以前インストールした時は再起動する度にバージョンが元に戻ってしまっていたんですが、今回はバッチリうまくいきました。
やはり2回目のインストールは理解が早いですな。

04.pipで必要なPythonパッケージをインストール

pipとはPythonのパッケージを管理するツールだそうです。
インターネット上にあるライブラリ等のPythonパッケージを必要に応じてダウンロードおよびインストールしたり、削除したり、依存関係があるものを自動的にダウンロードしてくれたりするツールです。

最初、私はpipがあれば全ての標準的なパッケージを自動でインストールしてくれるものだと思っていました。
しかしそれは大きな勘違いでした。
pipはただ単にpipコマンドを使ってパッケージをインストールし、そのリストが記録されるものだったようです(多分…)。

先に紹介したように、pyenvでPythonをインストールすると、pipもインストールされます。
pipはUbuntuのapt同様、頻繁にアップデートして、最新版にしておく必要があります。

まず、pipコマンドを使った場合の依存関係を以下のコマンドで確かめます。

~$ pip -V
pip 22.3.1 from /home/xxxxxx/.pyenv/versions/3.10.10/lib/python3.10/site-packages/pip (python 3.10)

バッチリ、先ほどpyenvでインストールしたPython 3.10.10 と紐づいているようです。

では、以下のコマンドで、pip が管理するパッケージ一覧を確認してみます。

pip list
Package    Version
---------- -------
pip        22.3.1
setuptools 65.5.0
 
[notice] A new release of pip available: 22.3.1 -> 23.0.1
[notice] To update, run: pip install --upgrade pip

この場合、pipのバージョンが22.3.1で、23.0.1にアップグレードできるそうなので、pipをアップグレードします。

python -m pip install --upgrade pip

その後、再度

~$ pip list
Package    Version
---------- -------
pip        23.0.1
setuptools 65.5.0

これでpipも最新版になりました。

今度はpip list にオプション-o 又は--outdated を付けると、最新版ではないパッケージのみを表示することができます。

~$ pip list -o
Package    Version Latest Type
---------- ------- ------ -----
setuptools 65.5.0  67.3.3 wheel

こうなると、setuptoolsもバージョンアップした方が良いらしい。

ならば、

python -m pip install --upgrade setuptools

これで再度

~$ pip list
Package    Version
---------- -------
pip        23.0.1
setuptools 67.3.3

これでsetuptoolsもアップデートされました。

因みに、pip とpip3 がありますが、pip3の依存関係も確認しておきます。

~$ pip3 -V
pip 23.0.1 from /home/xxxxxx/.pyenv/versions/3.10.10/lib/python3.10/site-packages/pip (python 3.10)

これは先ほどのpipと同じなので、pyenvの場合はpipで良いみたいです。

ただ、これではpipに2つしかパッケージが入っていませんね。

ネット上の多くの最初のパッケージインストールにsomepackageとあるので、それもインストールしておきます。

~$ python -m pip install SomePackage
Collecting SomePackage
Downloading somepackage-1.2.3.tar.gz (8.6 kB)
Preparing metadata (setup.py) ... done
Installing collected packages: SomePackage
DEPRECATION: SomePackage is being installed using the legacy 'setup.py install' method, because it does not have a 'pyproject.toml' and the 'wheel' package is not installed. pip 23.1 will enforce this behaviour change. A possible replacement is to enable the '--use-pep517' option. Discussion can be found at https://github.com/pypa/pip/issues/8559
Running setup.py install for SomePackage ... done
Successfully installed SomePackage-1.2.3

(翻訳)

非推奨: SomePackage は、従来の「setup.py install」メソッドを使用してインストールされています。これは、「pyproject.toml」がなく、「wheel」パッケージがインストールされていないためです。 pip 23.1 では、この動作の変更が強制されます。 可能な代替手段は、’–use-pep517′ オプションを有効にすることです。 ディスカッションは https://github.com/pypa/pip/issues/8559 にあります。

どうやらwheel パッケージがインストールされていないことが原因っぽいです。

ならば、一旦アンインストールします。

pip uninstall somepackage

次にwheel パッケージをインストールします。

python -m pip install wheel

そして、

~$ python -m pip install SomePackage
Collecting SomePackage
Using cached somepackage-1.2.3.tar.gz (8.6 kB)
Preparing metadata (setup.py) ... done
Building wheels for collected packages: SomePackage
Building wheel for SomePackage (setup.py) ... done
(中略)
Successfully built SomePackage
Installing collected packages: SomePackage
Successfully installed SomePackage-1.2.3

やった。
somepackageも成功しました。

ところで、ここで気付いたんですが、pipでインストールする際、一般的には

python -m pip install パッケージ名

ですが、pyenvでインストールすると、

pip install パッケージ名

で良いみたいですね。

また、Pythonプログラミングを続けていくと、pipでインストールすることが多々あると思います。
すると、複数のパッケージをアップグレードするのが面倒になってきます。
その場合はrequirements.txtを使うのですが、それについては後で説明します。

05.自分用のPython専用フォルダ作成し、パーミッション設定しておく

まず、VSCodeのリモートエクスプローラーで、自分用にPythonプログラミング用の専用フォルダを新たに作成しておきます。
下図の様にクリックしていきます。

(図05-01)

VSCodeのリモートエクスプローラーでフォルダを作成

VSCodeのリモートエクスプローラーでフォルダを作成

ここではとりあえずmypy としておきます。

(図05-02)

例としてmypyというフォルダを作成

例としてmypyというフォルダを作成

次に、ls -la コマンドで今作成したmypy ディレクトリのパーミッションを確認してみます。

~$ ls -la
合計 1128
drwxr-x---  8 xxxxxx xxxxxx    4096  2月 22 23:20 .
drwxr-xr-x  3 root    root       4096  8月  9  2022 ..
-rw-------  1 xxxxxx xxxxxx    6283  2月 22 23:33 .bash_history
-rw-r--r--  1 xxxxxx xxxxxx     220  1月  7  2022 .bash_logout
--------(中略)-----------------
drwxrwxr-x  2 xxxxxx xxxxxx    4096  2月 22 23:20 mypy

これから、mypyフォルダのパーミッションを自分だけ読み書き実行可能に変更しておきます。

~$ chmod 700 mypy

これで、改めてls -la コマンドで確認すると、以下のようになりました。

~$ ls -la
合計 1128
--------(中略)-----------------
drwx------  2 xxxxxx xxxxxx    4096  2月 22 23:20 mypy

これで所有者の自分のみ読み書き実行可能になりました。

では、次はいよいよPythonコードを入力して実行していきます。

コメント

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