今回は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はド素人ですので、誤り等ありましたらコメント投稿でご連絡いただけると助かります。
- Pythonプログラミング環境構築についてどれを使えば良いか調べる
- pyenvをインストールする
- pyenvでPythonをインストールする
- pipで必要なPythonパッケージをインストール
- 自分用のPython専用フォルダ作成し、パーミッション設定しておく
- 簡単なPythonコードでHello World
- requirements.txtを使うとpipパッケージの一括アップデートが超楽
- ラズパイとパソコン間でファイルのコピーや移動を行う
- VSCodeの拡張機能をインストールして、インテリセンスが使えるようにする
- VSCode拡張機能のインストール先はどこ?
- まとめ
【目次】
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)
ということで、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は使わず、新たにユーザー用のPythonをインストールすることに決定しました。
01-04. pyenvってどうよ? 別のパッケージ使った方が良い?
さて、先でも述べましたが、以前、ラズパイにPythonを初めてインストールした時、Pythonは何のパッケージを使ってインストールしたらよいかよくわかりませんでした。
ネットでいろいろ調べたところ、pyenvを使用すれば良さそうだったので、それでインストールしてみましたが、めちゃめちゃ面倒で何度も再インストールした経験があります。
そこで、pyenvについてChat GPTに聞いてみました。こんな回答です。
(図01-03)
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)
すると、.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)
次に一応、シェルを再起動しておきます。
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をインストールしていきます。
コメント