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

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

前回のさくらのレンタルサーバにClozure Clをインストールに引き続き、Common Lispのライブラリを利用するために、Quicklispをインストールする。

Quicklispをダウンロードする

% cd ~/work
% wget http://beta.quicklisp.org/quicklisp.lisp

Clozure CL を起動して、Quilklisp をインストールする

%ccl
Welcome to Clozure Common Lisp Version 1.9-r15760  (FreebsdX8632)!
? (load "quicklisp.lisp")

  ==== quicklisp quickstart loaded ====

    To continue with installation, evaluate: (quicklisp-quickstart:install)

    For installation options, evaluate: (quicklisp-quickstart:help)

#P"/home/bty/quicklisp.lisp"
? (quicklisp-quickstart:install :path ".quicklisp/")
; Fetching #<URL "http://beta.quicklisp.org/quickstart/asdf.lisp">
; 194.07KB
==================================================
198,729 bytes in 0.02 seconds (8437.88KB/sec)
; Fetching #<URL "http://beta.quicklisp.org/quickstart/quicklisp.tar">
; 210.00KB
==================================================
215,040 bytes in 0.02 seconds (10500.00KB/sec)
; Fetching #<URL "http://beta.quicklisp.org/quickstart/setup.lisp">
; 4.96KB
==================================================
5,078 bytes in 0.00 seconds (4958.98KB/sec)
; Fetching #<URL "http://beta.quicklisp.org/dist/quicklisp.txt">
; 0.40KB
==================================================
408 bytes in 0.00 seconds (398.44KB/sec)

  ==== quicklisp installed ====

    To load a system, use: (ql:quickload "system-name")

    To find systems, use: (ql:system-apropos "term")

    To load Quicklisp every time you start Lisp, use: (ql:add-to-init-file)

    For more information, see http://www.quicklisp.org/beta/

NIL
? (ql:add-to-init-file)
I will append the following lines to #P"/home/bty/\\.ccl-init.lisp":

  ;;; The following lines added by ql:add-to-init-file:
  #-quicklisp
  (let ((quicklisp-init (merge-pathnames ".quicklisp/setup.lisp" (user-homedir-pathname))))
    (when (probe-file quicklisp-init)
      (load quicklisp-init)))

Press Enter to continue.

#P"/home/bty/\\.ccl-init.lisp"
? (quit)
%

試しに WEBクライアントの drakmaライブラリをインストールして、単純なHTMLを記述した http://bty.sakura.ne.jp を読んでみる。

Windows でインストールしたときは OpenSSL 関連のライブラリが無いというエラーがでて苦労したが、さくらのインターネットではすんなりインストールできた。

%ccl
Welcome to Clozure Common Lisp Version 1.9-r15760  (FreebsdX8632)!
? (ql:quickload :drakma)
; Fetching #<URL "http://beta.quicklisp.org/dist/quicklisp/2013-03-12/systems.txt">
; 142.18KB
==================================================
145,597 bytes in 0.01 seconds (11848.71KB/sec)
; Fetching #<URL "http://beta.quicklisp.org/dist/quicklisp/2013-03-12/releases.txt">
; 211.98KB
==================================================
217,068 bytes in 0.01 seconds (23553.38KB/sec)
To load "drakma":
  Install 15 Quicklisp releases:
    alexandria babel bordeaux-threads cffi chunga cl+ssl
    cl-base64 cl-ppcre drakma flexi-streams puri
    trivial-features trivial-garbage trivial-gray-streams
    usocket
; Fetching #<URL "http://beta.quicklisp.org/archive/usocket/2013-01-28/usocket-0.6.0.1.tgz">
; 67.33KB
==================================================

    ( 省略 )

[package trivial-garbage].........................
[package cl+ssl]..................................
[package drakma].............
(:DRAKMA)
? (drakma:http-request "http://bty.sakura.ne.jp/")
"<html>
<head>
<title>bty.sakura.ne.jp</title>
</head>
<body>
<p>bty.saura.ne.jp</p>
</body>
</html>

"
200
((:DATE . "Mon, 15 Apr 2013 14:35:17 GMT") (:SERVER . "Apache/1.3.42 (Unix) mod_ssl/2.8.31 OpenSSL/0.9.8e") (:LAST-MODIFIED . "Sun, 03 Mar 2013 08:07:05 GMT") (:ETAG . "\"65-513304a9\"") (:ACCEPT-RANGES . "bytes") (:CONTENT-LENGTH . "101") (:CONNECTION . "close") (:CONTENT-TYPE . "text/html"))
#<URI http://bty.sakura.ne.jp/>
#<FLEXI-STREAMS:FLEXI-IO-STREAM #x3972A786>
T
"OK"
? 

おお、できた。よくわからんけど、できた。そろそろ、本も買おうと思った。ANSI Common Lisp が良さそうだ。

参考にしたサイト

さくらのレンタルサーバにClozure Clをインストール

最近、よせばいいのに CommonLisp に興味を持ちはじめた。

Modern Common Lisp を参考にして、さくらのレンタルサーバに Clozure Cl をインストールしてみた。

自分が使っているさくらのレンタルサーバのOSは FreeBSD 7.1-RELEASE-p16 だ。

Clozure CLのサイト からダウンロードページに移り、FreeBSD 6 and later の x86版をダウンロードすれば良いことを確認した。

さて、作業開始。参考にさせてもらう Modern Common Lisp と同じく、~/opt 配下にインストールすることにした。

% mkdir ~/opt
% cd ~/opt
% wget ftp://ftp.clozure.com/pub/release/1.9/ccl-1.9-freebsdx86.tar.gz

解凍してから試しに ccl を起動してみる。環境変数 CCL_DEFAULT_DIRECTORY に Clozure Cl のあるディレクトリパス(~/opt/ccl)を設定しておかないと起動に失敗する。

% tar zxvf ccl-1.9-freebsdx86.tar.gz
% cd ccl/scripts
% setenv CCL_DEFAULT_DIRECTORY ~/opt/ccl
% ./ccl
Welcome to Clozure Common Lisp Version 1.9-r15760  (FreebsdX8632)!
?

ちゃんと動いたので、ccl をPATH環境変数の通ったディレクトリにコピーする。自分の場合は ~/bin にコピーすることにした。

% cp ~/opt/ccl/scripts/ccl ~/bin

.cshrc ファイルに環境変数 CCL_DEFAULT_DIRECTORY の設定を追加する。

vi ~/.cshrc

setenv CCL_DEFAULT_DIRECTORY $HOME/opt/ccl

もう一息。 rehash して、 .chsrc を読み込んで環境変数を有効にする。

% rehash
% source ~/.cshrc

これで clozure Cl が使えるようになった。ためしに使ってみる。

%ccl
Welcome to Clozure Common Lisp Version 1.9-r15760  (FreebsdX8632)!
? (+ 1 2 3 4 5)
15
? (quit)
%

今日はここまで。