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)
%

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 3.5.1 のインストールが完了した。

さくらのレンタルサーバにPython3.4をインストールする

前回の記事で Python 3.3をインストールして、精神的に消耗してしまったが、気を取り直して、Python 3.4をインストールする。

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

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

ここからがPython 3.4のインストールの始まり。

■Python3.4をインストール

% mkdir -p ~/work/py3
% cd ~/work/py3
% wget --no-check-certificate https://www.python.org/ftp/python/3.4.3/Python-3.4.3.tgz
% tar zxvf ./Python-3.4.3.tgz
$ cd ./Python-3.4.3
$ ./configure --prefix=$HOME/local/python
$ make
$ make install

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

■.cshrcを修正する

% emacs ~/.cshrc
-----
set path = ($path $HOME/local/python/bin)
setenv PYTHON $HOME/local/python/lib
-----
% source ~/.cshrc
% rehash

前回のPython 3.3インストールで設定したものと同じ。

■とりあえず、実行してみる

% python3
Python 3.4.3 (default, Jun 14 2015, 18:41:52)
[GCC 4.2.1 20070831 patched [FreeBSD]] on freebsd9
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', '/home/bty/local/python/lib/python34.zip', '/home/bty/local/python/lib/python3.4', '/home/bty/local/python/lib/python3.4/plat-freebsd9', '/home/bty/local/python/lib/python3.4/lib-dynload', '/home/bty/local/python/lib/python3.4/site-packages']
>>>

実行できるようになった。sys.pathを表示して、どこにパスが通っているか確認した。

% pip3 -V
pip 6.0.8 from /home/bty/local/python/lib/python3.4/site-packages (python 3.4)

pipもちゃんと動く。Python3.3とはえらい違い、Python 3.4のインストールは超簡単。

さくらのレンタルサーバでPython3.3をインストールした記録

普段使っているPCにPython3をインストールしたので、さくらのレンタルサーバでもPython3を使えるようにした。Pelicanを動かしてみたいので、Quickstart — Pelican 3.5.0 documentationを読んだら、Python3.3と書いてあったので、Python3.4をあきらめ、Python3.3をインストールすることにした。

Pelicanのドキュメントをよく読んだら、Python2.7.xで動かすのがベストで、Python3については、Python3.3+でおおむね動く(意訳)と書いてあるではないか。「+」とは、「以上」という意味になると思われるので、Python3.4でもOKということか。苦労してインストールしたわりには報われない結果となった。

でも、せっかくインストールしたのでPython3.3が使えるようになった記録を残しておくことにした。

■Python3.3をインストール

% mkdir -p ~/work/py3
% cd ~/work/py3
% wget --no-check-certificate https://www.python.org/ftp/python/3.3.6/Python-3.3.6.tgz
% tar zxvf ./Python-3.3.6.tgz
$ cd ./Python-3.3.6
$ ./configure --prefix=$HOME/local/python
$ make
$ make install

どこのディレクトリにインストールするか迷ったのだが、$HOME/local/pythonが正解のようだ。いらなくなったら、まるごと捨てれば良いから管理が楽になる。

■.cshrcを修正する

% emacs ~/.cshrc
-----
set path = ($path $HOME/local/python/bin)
setenv PYTHON $HOME/local/python/lib
-----

% source ~/.cshrc
% rehash

pathの設定で、set path = ($HOME/local/python/bin) とやってしまったら、OSのコマンドを実行しようとしたら「コマンドが見つからない」エラーが発生。しばらくの間、途方に暮れた。しかたがないので、ローカルPCからWinScpを起動し、.cshrc をダウンロードして修正し、アップロードして難を逃れた。

■とりあえず、実行してみる

% python3
Python 3.3.6 (default, Jun 14 2015, 10:23:21)
[GCC 4.2.1 20070831 patched [FreeBSD]] on freebsd9
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', '/home/bty/local/python/lib/python33.zip', '/home/bty/local/python/lib/python3.3', '/home/bty/local/python/lib/python3.3/plat-freebsd9', '/home/bty/local/python/lib/python3.3/lib-dynload', '/home/bty/local/python/lib/python3.3/site-packages']
>>>

ちゃんと実行できるようになった。sys.pathを表示して、どこにパスが通っているか確認した。

■pipをインストールする

Python3.4からはpipが標準装備なのだが、3.3は自分でインストールしなきゃならん。最初にeasy_installをインストールして、その後で pip をインストールする。面倒な作業になった。

% cd ~/work/py3
% wget --no-check-certificate https://pypi.python.org/packages/source/d/distrib\
ute/distribute-0.6.49.tar.gz
% tar zxvf distribute-0.6.49.tar.gz
% cd distribute-0.6.49
% python3 setup.py install

インストールが終わったので、実行してみるとエラー発生。

% easy_install pip
error: can't create or remove files in install directory

The following error occurred while trying to add or remove files in the
installation directory:
    [Errno 13] Permission denied: '/usr/local/lib/python2.7/site-packages/test-\
easy-install-74228.write-test'

よくよくエラーメッセージ見ると、Phthon2.7のeasy_installを実行していた。

% which easy_install
/usr/local/bin/easy_install
% which easy_install-3.3
/home/bty/local/python/bin/easy_install-3.3

Python3用のeasy_installを探したらちゃんとあったのでホッとした。3.3用のものとわかるようにeasy_install-3.3を使う。

% easy_install-3.3 pip
....
Installed /home/bty/local/python/lib/python3.3/site-packages/pip-7.0.3-py3.3.eg\
g
....

pipのインストール完了。さて実行しようとすると、pipが無いというエラーメッセージがでる。pip3も同じ。

% pip
pip: Command not found.
% pip3
pip3: Command not found.
% rehash
% pip3

またまた、rehashコマンドを打ち忘れてしまっていた。これでやっとpipが使えるようになった。

UNIXの部屋 コマンド検索:rehash (*BSD/Linux)から
コマンドをタイプしたとき、シェルは実行可能ファイルを見つけるために、毎回 PATH で指定されたディレクトリを検索するわけではない。ハッシュテーブルに実行可能なコマンドを登録し、そこからコマンドを呼び出している。

このため、新しくシェルスクリプトを作ったり、パッケージをインストールした場合、実際はパスの通ったディレクトリに実行可能ファイルがあるにもかかわらず、そのコマンドがハッシュテーブルに登録されていないため、コマンドを見付けることができない場合がある。このようなときは rehash でハッシュテーブルの再構築をすることで、シェルに新しいコマンドを認識させることができる。

sh・bash では毎回 PATH に記述されたディレクトリを検索するので、csh・tcsh の rehash に相当するコマンドはない。

参考
Python 3.3 と pip をインストールした | Lonely Mobiler
Python3をさくらサーバー(FreeBSD)にインストール – Qiita
シェル変数と環境変数 – サーバエンジニアの知恵袋