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

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

今回はUbuntu Serverをインストールしたラズパイ(Raspberry Pi 4B)とVisual Studio Code(VSCode)でPythonプログラミングできるようにする環境構築を説明したいと思います。今回もあくまで自分用の備忘録です。
前回記事で紹介したSSHリモート接続のVisual Studio Code(VSCode)を使用します。

スポンサーリンク

正直言って、最初はどの方法で構築したらいいのかサッパリわかりませんでした。
ラズパイやLinuxでPythonプログラミングできるようにする情報は、ググればかなり豊富にありますが、あまりにも多種多様な方法があって、最もシンプルで自分に最適なものを見つけるのがとても大変でした。
以前にも紹介したように、私は過去に一度、ラズパイでPythonプログラミング環境を構築したことがありましたが、その時もわけが分らず適当にインストールして、最終的には不要なもので溢れたカオス状態の環境になっていました。特に、VSCodeの環境ファイル設定や拡張機能、そしてPythonのpipインストールがカオスでしたね。結局使わないのに、意味不明なものをインストールしていました。

そこで、前回前々回記事でも紹介したようにラズパイのUbuntu環境やVSCodeの環境を一から作り直し、Python環境も一から構築し直してみることにしました。

結果、効率的なVSCode周りの環境がシンプルになり、Python環境についてもかなり理解が進んだように思います。
不要なものを選別し、どの設定が自分にとって最適か、ピンポイントでわかってきたような気がします。(あくまで個人の感想)

ただ、やはりArduino IDEに比べて超面倒なので、プログラミング初心者にとってはハードルが高すぎです。
改めてLinuxシステムは先人に手取り足取り一から教えてもらうことが一番の近道だなと思いました。

ということで、これから備忘録として説明していきます。
自分はラズパイやLinux、Pythonはド素人ですので、誤り等ありましたらコメント投稿でご連絡いただけると助かります。

    【目次】

  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. まとめ

01.Pythonプログラミング環境構築についてどれを使えば良いか調べる

まずは、ラズパイ(Raspberry Pi 4B)のUbuntu ServerにPythonプログラミング環境を構築するにあたって、どの方法が最適か調べてみます。

Pythonにはいろいろなバージョンがありますが、最新バージョンは不安定で、古いライブラリが使用できないなどの不具合があるし、古いバージョンはできるだけ使いたくないし、OSにデフォルトで入っているPythonを使った方が良いのかよくわかりません。

それに、Python環境構築にはpyenvやvenv、conda 、Jupyter  notebookなどがあり、どれが今の自分に合っているかよくわかりませんでした。

Jupyter はGoogle Colaboratoryで使った経験がありますが、ラズパイでの純粋なPythonのみのサーバーを作るには不要だと思っていましたし、pyenvは以前インストールした時に複雑すぎて2度と使うものかと思っていました。
では、どれが最適なんでしょうか?

01-01. Ubuntu Server 22.04.01 にデフォルトでインストールしてあるPythonのバージョン確認

では、まず、前回前々回記事で紹介した、ラズパイ(Raspberry Pi 4B)にUbuntu Server 22.04.01 LTS をインストールして、VSCodeとSSHリモート接続できる状態で、デフォルトでインストールしてあるPythonのバージョンを確認してみます。

まず、お馴染みの以下のコマンドでUbuntuパッケージをアップデートしておきます。

sudo apt update
sudo apt upgrade -y
sudo reboot

ラズパイを再起動した後、以下のコマンドでPython 3のバージョンを確認します。

~$ python3 -V
Python 3.10.6

このように、2023年2月時点でUbuntu Server 22.04.01 LTSにはPython 3.10.6 がインストールされていることがわかりました。
このPythonがUbuntuのシステムPythonというやつです。

01-02. Chat GPTで現在のPythonお勧めバージョンを調べる

さて、先ほど調べたUbuntu  のデフォルトPythonのバージョンは果たして現在の推奨バージョンなのでしょうか?
ネット上の情報では最適解が見いだせないので、お遊びで今の流行りのChat GPTに聞いてみました。
すると、こんな感じです。

(図01-01)

Chat GPTにお勧めのPythonバージョンを質問した回答

Chat GPTにお勧めのPythonバージョンを質問した回答

ということで、Python 3.10系で良いらしいです。
ただ、2023/2月時点でのChat GPTは2021年までの言語モデルらしく、この回答は正確ではないかも知れません。
Python 3.10は2021年10月から出始めたらしく、現時点では1年以上経過しているため、使うには程よいバージョンかと思われますね。
ということで、Chat GPTを信じて3.10系バージョンの最新版をインストールしてみようと思います。

01-03. システムPythonとユーザー使用のPythonは別にした方が良い?

ところで、前節で調べたPythonバージョンは、OSのUbuntuにデフォルトで入っているPythonです。これはOSのシステムで使用しているPython(略してシステムPython)です。

実は、Python環境をアップデートやカスタマイズしていくと、OSのシステムに影響が出てくる可能性があるようで、システムのPythonは基本的に使わないようにした方が良いっぽいです。

一応、Chat GPTに聞いてみたら、以下の様な回答でした。

(図01-02)

Chat GPTにOSのシステムPythonとユーザーインストールPythonのどちらを使うべきかの回答

Chat GPTにOSのシステムPythonとユーザーインストールPythonのどちらを使うべきかの回答

Chat GPT ってスゴイっすね。違和感のない日本語回答です。

確かに、OS付属のアプリでPythonを使っていたとすると、アップデートやカスタマイズしたらシステム全体に影響がありそうですね。
ということで、システムPythonは使わず、新たにユーザー用のPythonをインストールすることに決定しました。

01-04. pyenvってどうよ? 別のパッケージ使った方が良い?

さて、先でも述べましたが、以前、ラズパイにPythonを初めてインストールした時、Pythonは何のパッケージを使ってインストールしたらよいかよくわかりませんでした。
ネットでいろいろ調べたところ、pyenvを使用すれば良さそうだったので、それでインストールしてみましたが、めちゃめちゃ面倒で何度も再インストールした経験があります。
そこで、pyenvについてChat GPTに聞いてみました。こんな回答です。

(図01-03)

Chat GPTにpyenvはどうよ?の回答

Chat GPTにpyenvはどうよ?の回答

pyenvは柔軟性が高く、広く認知され、多くの人々が使っているという回答なので、それを信じてpyenvを使うことに決定です。
それに、以前、インストールした経験があるので、慣れているものを使う方が時間短縮になりますしね。

02.pyenvをインストールする

というわけで、pyenvを使ってPythonをインストールすることに決定したので順番に説明していきます。

まず、以下のGitHubにあるpyenvのトップページを日本語訳にしながらインストールを進めていきます。

https://github.com/pyenv/pyenv

このページを読んでいると、いろいろなインストール方法があって、どれにしたら良いのかサッパリわかりません。

いろいろネットで調べた結果、pyenv-installer が一番簡単っぽいです。
これはChat GPTでもあまり良い回答が得られませんでした。
とにかく、pyenv-installerでインストールしてみます。
以下のページを日本語訳しながら進めていきます。

02-01. pyenv-installerの前提条件として、必要なパッケージを予めインストールしておく

以下のpyenv-installerのページを参照します。

https://github.com/pyenv/pyenv-installer

そこに記述されているとおり、pyenv-installerを使う前に、前提条件として記述してあるパッケージを予めインストールします。
以下のページを参照し、aptコマンドでインストールしていきます。

https://github.com/pyenv/pyenv/wiki

sudo apt update; sudo apt install build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev curl \
libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev

02-02. pyenv-installerでpyenvをインストールする

前提条件のパッケージをインストールしたら、次はpyenv-installerでpyenvをインストールします。
以下のコマンドです。

curl https://pyenv.run | bash

こんな感じで表示されます。

~$ curl https://pyenv.run | bash
% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
Dload  Upload   Total   Spent    Left  Speed
100   270  100   270    0     0    199      0  0:00:01  0:00:01 --:--:--   199
Cloning into '/home/xxxxxx/.pyenv'...
remote: Enumerating objects: 1100, done.
--------(中略)--------------
Cloning into '/home/xxxxxx/.pyenv/plugins/pyenv-doctor'...
--------(中略)--------------
Cloning into '/home/xxxxxx/.pyenv/plugins/pyenv-installer'...
--------(中略)--------------
Cloning into '/home/xxxxxx/.pyenv/plugins/pyenv-update'...
--------(中略)--------------
Cloning into '/home/xxxxxx/.pyenv/plugins/pyenv-virtualenv'...
--------(中略)--------------
Cloning into '/home/xxxxxx/.pyenv/plugins/pyenv-which-ext'...
--------(中略)--------------
WARNING: seems you still have not added 'pyenv' to the load path.
 
# Load pyenv automatically by appending
# the following to
~/.bash_profile if it exists, otherwise ~/.profile (for login shells)
and ~/.bashrc (for interactive shells) :
 
export PYENV_ROOT="$HOME/.pyenv"
command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
 
# Restart your shell for the changes to take effect.
 
# Load pyenv-virtualenv automatically by adding
# the following to ~/.bashrc:
 
eval "$(pyenv virtualenv-init -)"
 

後半を翻訳すると

警告: まだ ‘pyenv’ をロード パスに追加していないようです。
~/.bash_profile が存在する場合、そうでない場合は ~/.profile (ログインシェル用)および ~/.bashrc (インタラクティブシェル用)に以下を追加して、pyenv を自動的にロードします。

export PYENV_ROOT="$HOME/.pyenv"
command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

変更を有効にするためにシェルを再起動します。
exec "$SHELL"
~/.bashrc に以下を追加して、pyenv-virtualenv を自動的にロードします。
eval "$(pyenv virtualenv-init -)"
もう一回bashシェルを再起動
exec "$SHELL"

この意味が最初よくわからず、以下のコマンドをターミナルで実行してみました。

~$ export PYENV_ROOT="$HOME/.pyenv"
command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

でも、ラズパイを再起動し、printenv コマンドでPATHを確認したら、PATHが反映されていませんでした。
どうやらコマンドを打つのではなく、ファイルに書き込むということのようです。

解決方法は、以下のサイトに書いてありました。

https://github.com/pyenv/pyenv/wiki

<翻訳引用>

Ubuntuのbashでは、おそらく既に~/.profileがあるはずです。その場合、~/.bash_profileを作成する代わりに、そこにpyenvの設定を追加する必要があります。しかし、このファイルはデスクトップログイン時に一度だけ読み込まれるので、代わりに ~/.bashrc に pyenv を追加した方が早く結果を得られるかもしれません。

ということで、~/.bashrc ファイルに設定を書き込むことが最適なようなので、そうします。
(ここで表示されている~/ の意味は/home/ユーザー名 ディレクトリの意味です。)

まず、/home/ユーザー名 ディレクトリに、.bash_profile 又は.profile 又は.bashrc というファイルが有るかVSCodeのSSHリモートエクスプローラーで探します。

(図02-01)

VSCodeのリモートエクスプローラーでファイルを探す

VSCodeのリモートエクスプローラーでファイルを探す

すると、.profile.bashrc というファイルが存在することが分かります。

先に紹介した、pyenvのwikiどおりに、.profile ではなく、.bashrc ファイル内の最後に以下をコピペして上書き保存しておきます。

export PYENV_ROOT="$HOME/.pyenv"
command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

(図02-02)

/home/ユーザー名/.bashrc ファイルの最後に入力

/home/ユーザー名/.bashrc ファイルの最後に入力

次に一応、シェルを再起動しておきます。

exec "$SHELL"

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

sudo reboot

そして、再度、printenv コマンドで環境変数を確認してみます。

~$ printenv
SHELL=/bin/bash
COLORTERM=truecolor
PYENV_SHELL=bash
TERM_PROGRAM_VERSION=1.75.1
PWD=/home/xxxxxx
PYENV_VIRTUALENV_INIT=1
 
--------(中略)-----------------
 
PYENV_ROOT=/home/xxxxxx/.pyenv
--------(中略)-----------------
PATH=/home/xxxxxx/.pyenv/plugins/pyenv-virtualenv/shims:/home/xxxxxx/.pyenv/shims:/home/xxxxxx/.vscode-server/bin/1234567890abcdefghijklmnopqrstu0123456/bin/remote-cli:/home/xxxxxx/.pyenv/plugins/pyenv-virtualenv/shims:/home/xxxxxx/.pyenv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
TERM_PROGRAM=vscode
VSCODE_IPC_HOOK_CLI=/run/user/1000/vscode-ipc-1234567890abcdefg.sock
_=/usr/bin/printenv

やったぜ!
PATHが反映されていますね。
とりあえず、これでOK!

次に、以下のコマンドでpyenvをアップデートします。

pyenv update

アップデート完了したら、pyenvのバージョン確認です。

~$ pyenv --version
pyenv 2.3.13

では、次はpyenvを使ってPythonをインストールしていきます。

コメント

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