8
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ラズパイへのPython3.9.7のインストール ※少しハマったのでまとめ

Last updated at Posted at 2021-09-14

#本記事の内容

  • ラズパイへの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:~ $

#手順の流れ

  1. TeraTarmでsshログインする
  2. Pythonの実行媒体のダウンロード
  3. コンパイルとインストール
  4. シンボリックリンクの設定
  5. Pythonの反映確認

1. TeraTarmでsshログインする

WindowsにてTeraTarmを起動して、ラズパイにSSH接続する。

2. Pythonの実行媒体のダウンロード

取得可能なバージョンは、こちらのサイトから確認できる。
01.png

現在は、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 $

インストールが完了。

手順は以上。

参考文献

本記事の作成に当たり、以下の情報を参考にさせて頂きました。

8
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?