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に変更したんだろうか、ぜんぜん記憶がない。

さくらのレンタルサーバにPython3.6.1をインストールした

Python3.4をインストールしたのが昨年6月だから、ほぼ1年経っている。

手元のPCのPythonは、Anacondaという超便利な仕組みでインストールして、Python 3.6.0になっている。このPCで作ったプログラムをさくらのレンタルサーバに転送して実行したらエラーがでてしまった。

dateteimモジュールで、W3C Datetime 形式のタイムスタンプ、つまり 2004-09-22T14:12:14+00:00 という形式のやつを作りたいので下記のように書いて

dt.isoformat(timespec=’seconds’)

Python3.4.3で実行したら、

‘timespec’ is an invalid keyword

と怒られた、というわけだ。Python 3.6で動いてるんだから、プログラムの回避策を考えるよりもPythonをバージョンアップしたほうが早い。

前置きはそこそこに、Python 3.6.1のインストールはあっけなく終わった。

前回記事のさくらのレンタルサーバにPython3.4をインストールするのとおりに、「3.4.3」 を 「3.6.1」 に変更してやったらうまくいった。やっぱり作業を記録しておくのは大事ですね。ということで、再び記録しておく。

取得したソースのURL
https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tgz

% python3
Python 3.6.1 (default, May  6 2017, 18:08:26)
[GCC 4.2.1 20070831 patched [FreeBSD]] on freebsd9
Type "help", "copyright", "credits" or "license" for more information.
% pip3 -V
pip 9.0.1 from /home/bty/local/python/lib/python3.6/site-packages (python 3.6)
%