さくらのレンタルサーバで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
シェル変数と環境変数 – サーバエンジニアの知恵袋