#本記事の内容
- ラズパイへのPython 3.9.7へのインストール
#実施環境
- Windows 10
- TeraTarm Version 4.9.4
- Raspberry Pi 2 Model B
- PLANEX 無線LAN子機 GW-USNANO2A ※Raspberry Pi 2はWi-Fi通信モジュールがないため、無線LAN子機をUSBに接続しWi-Fi通信を行う。
- 家庭内の無線LANネットワーク環境にて実施
#ラズパイの現状確認
初期状態のラズパイでpythonコマンドを実行すると、バージョンが2.7.16だったので最新版へアップデートを行う。
pi@raspberrypi:~ $ python --version
Python 2.7.16
もう少し見てみるとpython3.7も入っているようだ。
現時点での最新版である3.9.7へのアップデートを行うことにする。
pi@raspberrypi:~ $ which python
/usr/bin/python
pi@raspberrypi:~ $ ls -l /usr/bin/python*
lrwxrwxrwx 1 root root 7 Mar 4 2019 /usr/bin/python -> python2
lrwxrwxrwx 1 root root 9 Mar 4 2019 /usr/bin/python2 -> python2.7
-rwxr-xr-x 1 root root 2984816 Oct 10 2019 /usr/bin/python2.7
lrwxrwxrwx 1 root root 36 Oct 10 2019 /usr/bin/python2.7-config -> arm-linux-gnueabihf-python2.7-config
lrwxrwxrwx 1 root root 16 Mar 4 2019 /usr/bin/python2-config -> python2.7-config
-rwxr-xr-x 1 root root 154 Dec 30 2018 /usr/bin/python2-pbr
lrwxrwxrwx 1 root root 9 Mar 26 2019 /usr/bin/python3 -> python3.7
-rwxr-xr-x 2 root root 4275580 Jan 22 2021 /usr/bin/python3.7
lrwxrwxrwx 1 root root 36 Jan 22 2021 /usr/bin/python3.7-config -> arm-linux-gnueabihf-python3.7-config
-rwxr-xr-x 2 root root 4275580 Jan 22 2021 /usr/bin/python3.7m
lrwxrwxrwx 1 root root 37 Jan 22 2021 /usr/bin/python3.7m-config -> arm-linux-gnueabihf-python3.7m-config
lrwxrwxrwx 1 root root 16 Mar 26 2019 /usr/bin/python3-config -> python3.7-config
lrwxrwxrwx 1 root root 10 Mar 26 2019 /usr/bin/python3m -> python3.7m
lrwxrwxrwx 1 root root 17 Mar 26 2019 /usr/bin/python3m-config -> python3.7m-config
lrwxrwxrwx 1 root root 14 Mar 4 2019 /usr/bin/python-config -> python2-config
pi@raspberrypi:~ $
#手順の流れ
- TeraTarmでsshログインする
- Pythonの実行媒体のダウンロード
- コンパイルとインストール
- シンボリックリンクの設定
- Pythonの反映確認
1. TeraTarmでsshログインする
WindowsにてTeraTarmを起動して、ラズパイにSSH接続する。
2. Pythonの実行媒体のダウンロード
取得可能なバージョンは、こちらのサイトから確認できる。
現在は、3.9.7が最新なのでこちらをwgetコマンドでラズパイにダウンロードする。
pi@raspberrypi:~ $ wget https://www.python.org/ftp/python/3.9.7/Python-3.9.7.tgz
--2021-09-14 11:06:04-- https://www.python.org/ftp/python/3.9.7/Python-3.9.7.tgz
Resolving www.python.org (www.python.org)... 2a04:4e42:1a::223, 151.101.108.223
Connecting to www.python.org (www.python.org)|2a04:4e42:1a::223|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 25755357 (25M) [application/octet-stream]
Saving to: ‘Python-3.9.7.tgz’
Python-3.9.7.tgz 100%[===================================================>] 24.56M 3.82MB/s in 6.2s
ファイルが取得できたことを確認する。
pi@raspberrypi:~ $ ls -l Python-3.9.7.tgz
-rw-r--r-- 1 pi pi 25755357 Aug 30 20:52 Python-3.9.7.tgz
pi@raspberrypi:~ $
ファイルがダウンロードできた。
3. コンパイルとインストール
ダウンロードしたtgzファイルを展開し、コンパイルとインストールを行う。
pi@raspberrypi:~ $ tar -zxvf Python-3.9.7.tgz
pi@raspberrypi:~ $ cd Python-3.9.7/
pi@raspberrypi:~/Python-3.9.7 $ ./configure
pi@raspberrypi:~/Python-3.9.7 $ make
makeを実行したらエラーが二つ出た。
(エラー1)
/home/pi/Python-3.9.7/Modules/_ctypes/_ctypes.c:107:10: fatal error: ffi.h: No such file or directory
#include <ffi.h>
^~~~~~~
compilation terminated.
(エラー2)
Could not build the ssl module!
Python requires an OpenSSL 1.0.2 or 1.1 compatible libssl with X509_VERIFY_PARAM_set1_host().
LibreSSL 2.6.4 and earlier do not provide the necessary APIs, https://github.com/libressl-portable/portable/issues/381
ffiとssl関連のパッケージに不足があるようだ。
次のコマンドで必要なパッケージを追加する。
pi@raspberrypi:~/Python-3.9.7 $ sudo apt install libffi-dev
pi@raspberrypi:~/Python-3.9.7 $ sudo apt install libssl-dev openssl
※Do you want to continue? [Y/n]が出た場合は、Y
を入力する。
インストールしたSSLのパスをPythonに認識させるため、設定ファイルのパスを変更する。
pi@raspberrypi:~/Python-3.9.7 $ vi Modules/Setup
(変更前 ※変更箇所のみ抜粋)
#SSL=/usr/local/ssl
#_ssl _ssl.c \
# -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
# -L$(SSL)/lib -lssl -lcrypto
(変更後 ※変更箇所のみ抜粋。4行のコメントアウトを外し、SSLのパスを変更)
SSL=/usr
_ssl _ssl.c \
-DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
-L$(SSL)/lib -lssl -lcrypto
もう一度configureとmakeしてみる。
pi@raspberrypi:~/Python-3.9.7 $ ./configure
pi@raspberrypi:~/Python-3.9.7 $ make
パッケージを追加することでmakeを実行してもエラーが起きなかった。
※余談※
pi@raspberrypi:~/Python-3.9.7 $ which openssl
/usr/bin/openssl
opensslのパスが/usr/bin/opensslだったので、最初にSSL=/usr/bin/opensslとしたが別のエラーとなってしまった。
パスを調べた結果SSL=/usrとするのが良さそうだったので、そうしてみた。
makeが完了したので、make install実行する。
pi@raspberrypi:~/Python-3.9.7 $ sudo make install
エラーが起きずインストールが完了した。
ログがかなり流れるが以下のメッセージを確認できた。
Python build finished successfully!
以下のコマンドでPython3.9.7がインストールされていることの確認。
pi@raspberrypi:~ $ ls -l /usr/local/bin/
total 16552
lrwxrwxrwx 1 root root 8 Sep 14 14:43 2to3 -> 2to3-3.9
-rwxr-xr-x 1 root root 101 Sep 14 14:43 2to3-3.9
lrwxrwxrwx 1 root root 7 Sep 14 14:43 idle3 -> idle3.9
-rwxr-xr-x 1 root root 99 Sep 14 14:43 idle3.9
-rwxr-xr-x 1 root root 229 Sep 14 14:45 pip3
-rwxr-xr-x 1 root root 229 Sep 14 14:45 pip3.9
lrwxrwxrwx 1 root root 8 Sep 14 14:43 pydoc3 -> pydoc3.9
-rwxr-xr-x 1 root root 84 Sep 14 14:43 pydoc3.9
lrwxrwxrwx 1 root root 9 Sep 14 14:43 python3 -> python3.9
-rwxr-xr-x 1 root root 16920720 Sep 14 14:40 python3.9
-rwxr-xr-x 1 root root 3093 Sep 14 14:43 python3.9-config
lrwxrwxrwx 1 root root 16 Sep 14 14:43 python3-config -> python3.9-config
pi@raspberrypi:~ $
4. シンボリックリンクの設定
現在のpythonコマンドで呼び出されるバージョンを再確認する。
pi@raspberrypi:~ $ python --version
Python 2.7.16
pi@raspberrypi:~ $
まだ、Python 2.7.16のままで不便なので、シンボリックリンクを一度クリアしインストールしたバージョンに変更する。
インストールしたPythonのパスは/usr/local/binにあるため、ここにシンボリックリンクを張る。
pi@raspberrypi:~ $ cd /usr/bin/
pi@raspberrypi:/usr/bin $ ls -l /usr/bin/python
lrwxrwxrwx 1 root root 7 Mar 4 2019 /usr/bin/python -> python2
このシンボリックリンクを消す。
pi@raspberrypi:/usr/bin $ sudo unlink /usr/bin/python
pi@raspberrypi:/usr/bin $ ls -l /usr/bin/python
ls: cannot access '/usr/bin/python': No such file or directory
シンボリックリンクが消えたことを確認。
新しくインストールしたPythonにシンボリックリンクを張る。
pi@raspberrypi:/usr/bin $ sudo ln -s /usr/local/bin/python3.9 python
pi@raspberrypi:/usr/bin $ ls -l /usr/bin/python
lrwxrwxrwx 1 root root 24 Sep 14 14:54 /usr/bin/python -> /usr/local/bin/python3.9
5. Pythonの反映確認
python --version
コマンドにてpythonコマンドで呼び出されるpythonのバージョンを確認する。
pi@raspberrypi:/usr/bin $ python --version
Python 3.9.7
pi@raspberrypi:/usr/bin $
インストールが完了。
手順は以上。
参考文献
本記事の作成に当たり、以下の情報を参考にさせて頂きました。