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

Windows10にPython3.5をインストール

ひさしく、ブログを更新していなかったが、Python3 をインストールしたのでメモしておく。
僕のPC環境は以下のとおり。

Thinkpad T410
Windows 10 (64bit)

ダウンロード

まずは、Python3 をダウンロードする。
https://www.python.org/downloads/windows/

Windows10(64bit) に適合するPython を選択した。
Python 3.5.1 Windows x86-64 executable installer

インストール

ダウンロードしたインストーラプログラムを実する。
僕は、Python3.5 を C:Python35のディレクトリにインストールしたかったので、Customize installration を選択した。

Add Python 3.5 to PATH をチェックして、Customize installation をクリック。
Optional Features の各項目にチェックがはいっているがそのまま Next をクリック。
Customize install location を C:\Python35 にして Install をクリック。

インストーラプログラムが終了したら、エクスプローラで c:\Python35のフォルダが作られ、フォルダの中にPythonのプログラムファイルができているのを確認した。

環境変数の設定

さて次に、僕は Python2.7をインストールしていたので、Windowsのシステム環境変数 path から Python2.7を削除しなければならない。

Windows10のコントロールパネルは、windowsキーと x を同時に押すと画面が表示される。システムとセキュリティを選択して、「システム」をクリック。「設定の変更」をクリックすると、システムのプロパティ画面が表示される。詳細設定タブを選択し、環境変数をクリックすると、やっと目的の[環境変数]を変更する画面が表示される。ここで、Path から C:\Python27\ と c:\Pyton27\Scripts\ を削除する。先ほどPython3.5をインストールするときに、 Add python 3.5 to PATH をチェックしていたしたので、C:\Python35\ と C:\Python35\Scripts は環境変数 Path にちゃんと書かれていた。

起動確認

これで環境変数も書き直したので、Dos窓を開いて、Python が立ち上がるか確認する。

> python -V
Python 3.5.1

Python 3.5.1 のインストールが完了した。

Windows7にPython3.4の後にPython3.3をインストールしてはまったこと

Windows7にPython3.4をインストールした後、PyAudioがPython3.3までしかサポートしていないことがわかり、Python3.3をインストールしたのだが、PyAudioのサンプルプログラムを動作させようとしてはまってしまった。

PyAudio: PortAudio v19 Python BindingsのExamplesをエディタにコピペしてsample.pyの名前で保存した。いつものように、拡張子.pyにはPythonが関連づけてあるから、sample.pyを実行させた。

> sample.py
Please build and install the PortAudio Python bindings first.

PortAudioをインストールしなさいというメッセージがでてサンプルが実行できない。インストールした C:\Python33\Lib\site-packages\pyaudio.py を開いてメッセージを表示する部分をみると、

# attempt to import PortAudio
try:
    import _portaudio as pa
except ImportError:
    print("Please build and install the PortAudio Python " +
          "bindings first.")
    sys.exit(-1)

_portaudioモジュールを読み込もうとしたときに例外が発生しているようだ。C:\Python33\Lib\site-packagesディレクトリにはちゃんと_portaudioモジュールがあるし、そのほかに原因があるのだろうか、と悩んでしまった。

そこでまずは基本にもどり、pythonを起動してから、import pyaudio とやると上述のメッセージは出ない。ということは、コマンドプロンプトで sample.py とファイル名だけで実行させると、Python3.4が起動して実行していた。python sample.py とやれば、Python3.3が起動してsample.pyが実行される。

Windows7の拡張子付けを調べてみた。

>assoc .py
.py=Python.File

>ftype python.file
python.file="C:\Windows\py.exe" "%1" %*

ファイル拡張子 .py にファイル・タイプ Python.Fileが定義付けされている。起動するプログラムは “C:\Windows\py.exe” “%1” %* であることがわかった。Ptyon3.4をインストールしたときに py.exe が作られていたが、その後でPython3.3をインストールしても上書きされていない。Python3.3と3.4のインストール挙動の違いがハマリの原因だった。

試しに、バージョンを表示するプログラムを書いて実行すると、

# test.py
import sys
print(sys.version)
>test.py
3.4.2 (v3.4.2:ab2c023a9432, Oct  6 2014, 22:15:05) [MSC v.1600 32 bit (Intel)]

>python test.py
3.3.5 (v3.3.5:62cf4e77f785, Mar  9 2014, 10:37:12) [MSC v.1600 32 bit (Intel)]

スクリプトの前にちゃんと python を入力すれば問題無いのだった。