pip3が使えないので、さくらのレンタルサーバに Python3.6.5 をインストールする

久しぶりにさくらレンタルサーバを触っていて、pip3が使えないことに気づいた。

$ pip3 install pytz
Collecting pytz
  Could not fetch URL https://pypi.python.org/simple/pytz/: There was a problem confirming the ssl certificate: [SSL: TLSV1_ALERT_PROTOCOL_VERSION] tlsv1 alert protocol version (_ssl.c:777) - skipping
  Could not find a version that satisfies the requirement pytz (from versions: )
No matching distribution found for pytz

エラーメッセージから推測するに、 OpenSSLがらみの問題で使えないようだ。この前のように、Python 3.6.3 をバージョンアップして Python 3.6.5 にしたのだが、pip3 が正常に使えない。

$ python3 -V
Python 3.6.3

$ pip3 -V
pip 9.0.3 from /home/bty/local/python/lib/python3.6/site-packages (python 3.6)

それじゃ、ということで、OpenSSL あたりはどなっているのか調べてみる。

$ openssl version
OpenSSL 1.0.2h  3 May 2016

$ python3
Python 3.6.5 (default, May 26 2018, 19:04:07) 
[GCC 4.2.1 20070831 patched [FreeBSD]] on freebsd9
Type "help", "copyright", "credits" or "license" for more information.
>>> import ssl
>>> print(ssl.OPENSSL_VERSION)
OpenSSL 0.9.8zf 19 Mar 2015
>>>

あれれ。なぜか、せっかくインストールした Python 3.6.5 は古いバージョンのOpenSSLを呼んでくるみたいだ。configure するとき、/usr/local/ssl を使うようにオプションを追加してコンパイルしたら、新しいOpenSSLを使うようになり、pip3もちゃんと動くようになった。

$ python3
Python 3.6.5 (default, May 26 2018, 19:04:07) 
[GCC 4.2.1 20070831 patched [FreeBSD]] on freebsd9
Type "help", "copyright", "credits" or "license" for more information.
>>> import ssl
>>> print(ssl.OPENSSL_VERSION)
OpenSSL 1.0.2h  3 May 2016

以下はインストールした記録

■インストール準備

前回インストールしたPython 3.6.3 と インストールに使ったファイルたちをばっさり削除した。

$ rm -rf ~/local/python/*
$ rm -rf ~/work/py3/*

■Python3.6.5 をインストール

$ mkdir -p ~/work/py3
$ cd ~/work/py3
$ wget --no-check-certificate https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz
$ tar zxvf ./Python-3.6.5.tgz
$ cd ./Python-3.6.5
$ ./configure CPPFLAGS="-I/usr/local/ssl/include" LDFLAGS="-L/usr/local/ssl/lib" --prefix=$HOME/local/python
$ make
$ make install

インストール先は $HOME/local/python ディレクトリになる。

■メモ
それにしても、いつSHELLをbashに変更したんだろうか、ぜんぜん記憶がない。