Android黎明期のクラムシェルたち ( その3 LifeTouch NoteでPython最新版を使おう )

LifeTouch Noteで、Python3.8.6をコンパイルしてみる


前回で、一通りの環境を構築できたのですが、実はPython環境に問題があります。

”pip”が動きません。

このバージョンでは、”pip”はpython標準インストールでは入らないので、”apt-get install python3-pip”で入れてみたのですが、モジュールをインストールしようとすると、”Cannnot fetch index base URL http://…. ”とエラーを吐き、動いてくれません。
どうも、セキュリティ関係の問題のようなので、色々情報を探ったり、confファイルを書いたり、設定を変えてみたりしたのですが、うまくいかず匙を投げました。

そもそも、Python3自体もバージョンが”3.2”と低いこともあって、今一つの感があります。
ということなので、Pythonをソースからコンパイルして、最新のレベルまで挙げてしまいしょう。Python3.7以降は、”pip”も標準装備なので、これで悩むこともなくなるとの期待も込めています。


Pythonのコンパイル方法

Pythonのコンパイル方法は、インターネット上にいくつかの情報が上がっていますが、今回は
このサイトの情報を参考にさせていただきました。ありがとうございます。

やるべきことは簡単で、下記のステップを取ります。

(1)必要なパッケージの事前インストール

まずは、前回インストールしたPython3を削除しておきます。

# apt-get remove python3 python3-pip  
# apt-get autoremove  
  

その後、必要なツールをインストールします。開発ツールである”build-essential”は、当然入っていると思いますが、記録のため入れておきます。

# apt-get install build-essential libbz2-dev libdb-dev libreadline-dev libffi-dev libgdbm-dev liblzma-dev libncursesw5-dev libsqlite3-dev libssl-dev zlib1g-dev uuid-dev tk-dev  

(2)Pythonソースのダウンロード

本家python.orgから、ソースをダウンロードします。今回は、”Python-3.8.6.tgz”を使いました。

(注)2020/10にPython3.9.0が出てしまい、3.8.6は最新版ではなくなってしまいました。「タイトルに偽りあり」ですが、新バージョンの最初のリリースはいささか不安。こちらを使うことにしました...ということにしておいて下さい(笑)。

(3)Pythonのコンパイルとインストール

適当なディレクトリに置いたtar ballを解凍し、下記の手順でコンパイルとインストールを実行します。

# tar xzvf Python-3.8.6.tgz  
# cd Python-3.8.6  
# ./configure  
# make  
# make altinstall  

LifeTouch Note実機で実行すると、1時間程度かかりますが、特に問題なく完了しました。

Lifetouch

老体に鞭打って、PythonをコンパイルするLifeTouch Noteの勇姿を見よ!!

ここまでは、順調でしたね。


SSLの問題が発生

上記作業が完了すると、”/usr/local/bin/python3.8”、”/usr/local/bin/pip3.8”の実行ファイルがインストールされています。
早速、使ってみましょう。

Lifetouch

Pythonインタープリタは問題なく動きましたが、”pip”はこれまたエラーを吐いています。どうもSSL関係のようですが、コンパイル前に”libssl-dev”はインストールされていることを確認しています。

Lifetouch

確認のため、”ssl”をimportしようとすると、

Lifetouch

なるほど、インストールされていませんね。

これには相当悩みましたが、こんな情報を見つけました。
このサイトによると、

The first problem is that the packaged versions of openssl and libssl-dev are missing header information required to build Python 3.7+ so you will have to compile your own:

とのこと。要するに、「packageで入れたopensslとlibssl-devには、Pythonをbuildするために必要なheaderがない」らしい。
対応策としては、「opensslをソースからコンパイルして、生成されるヘッダーとライブラリを使え」ということのようです。


問題解消へのアプローチ

それでは、上記情報に従って、対応していきましょう。

(1) opnesslのコンパイル

まずは、必要なツールを事前に入れて置きます。

# apt-get install checkinstall libreadline-gplv2-dev libncursesw5-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev  

opensslのソースをwww.openssl.orgからダウンロードして、”/usr/src”に配置します。
このサイトと同じバージョン”openssl-1.0.2o.tar.gz”を使うことにしました。

# cd /usr/src  
# tar xzvf openssl-1.0.2o.tar.gz  
# cd openssl-1.0.2o  
# ./config shared --prefix=/usr/local/  
# make  
# make install  

完了後、Python用に”lib”ディレクトリを作成し、上記で生成されたobjectをコピーしておきます。

We will need to pass /usr/src/openssl-1.0.2o into the Python configure script. However, the configure script will look for a lib directory in that path which doesn’t exist. So we’ll create that manually:

ということですね。

# mkdir lib  
# cp ./*.{so,so.1.0.0,a,pc} ./lib  

(2) Python3.8.6のリコンパイル

次に、Pythonを再度コンパイルします。

# cd Python-3.8.6  
# ./configure --with-openssl=/usr/src/openssl-1.0.2o  
# make  
# make altinstall  

今回は、”configure”で、先程生成した”openssl”のディレクトリを指定しておきます。このサイトでは、”–enable-optimizations”も指定していますが、処理時間が大幅に伸びますので、ここでは外しておきます。

完了後、早速テストしてみます。

Lifetouch

あれれ、うまくいかない。これはまいったなあ。

再度、makeをかけてみると、SSL関係やはりおかしかったようです。大量のメッセージがターミナル上に流れていたので、見逃していました。

Lifetouch

(3) 解決策

メッセージを見る限り、opensslライブラリ関係のように思われます。
このサイトのComments欄にも「うまく行かなかった」という報告があり、そのフォローとして、下記の環境変数を指定してからコンパイルせよ、というコメントがありました。
なるほど、今回インストールしたオブジェクトとヘッダーを先に参照させろということですね。
早速、これを指定して再コンパイル。”clean”したほうが良いでしょう。

# export LDFLAGS="-L/usr/local/lib/"  
# export LD_LIBRARY_PATH="/usr/local/lib/"  
# export CPPFLAGS="-I/usr/local/include -I/usr/local/include/openssl"  
# make clean  
# make  

うまくいったようなので、再度インストール。

# make altinstall  

検証してみましょう。

Lifetouch

”ssl”のimportも、pipによるモジュールインストールもうまくいきました。

なお、再ログイン後の実行にも有効になるよう、~/.bashrcに下記を追加しておきましょう。

export LD_LIBRARY_PATH="/usr/local/lib/"  

これで、Python3.8.6のインストール完了です。”pip”も動いてめでたし、めでたし。

「これ、何に使うの?」と聞かれると、少しうろたえますけど(笑)。

まあ、自己満足でいいじゃありませんか。

今回は少し無理をしてPython3を使えるようにしてみましたが、この後pandasのインストールには失敗しました。この時代では、いまだPython3環境が整備されていないということでしょう。
Python2.7が標準で入っていることを考えると、こちらを使ったほうが現実的ですね。pandasも”apt-get install python-pandas”で簡単にインストールできます。