概要
さくらのレンタルサーバーでPython3.13.1を動かした。その手順と課題を述べる。
現状と課題
さくらのレンタルサーバーのPython、OpenSSLのバージョンは以下の通りである。
パッケージ | バージョン | Path/Dir |
---|---|---|
Python | 3.8.12 | /usr/bin/python3 |
OpenSSL | 1.1.1k-FreeBSD | /usr |
1.0.2k-dev | /usr/local |
OpenSSLは2つのバージョンがインストールされている。Python3.10以降ではOpenSSL1.1.1が必要なので/usrのOpenSSLを使えば良いはず。
ところが、Python3.13.1を--with-openssl=/usrで./configureしてもOpenSSLが古いと怒られる
% ./configure --prefix=$HOME/.local --with-openssl=/usr
...
checking for stdlib extension module _ssl... missing
checking for stdlib extension module _hashlib... missing
...
%
...
configure:28287: checking whether OpenSSL provides required ssl module APIs
configure:28320: gcc -pthread -o conftest -I/usr/include -L/usr/lib conftest
.c -lintl -ldl -lutil -lssl -lcrypto >&5
conftest.c:470:10: error: #error "OpenSSL >= 1.1.1 is required"
...
この原因はつかめていないが、とりあえずPython3.13.1を動かしたい。
解決方法
OpenSSLの最新バージョン3.4.0をホームディレクトリ下にインストールし、これを使ってPythonを構築したので、以下その手順を述べる。
OpenSSLのインストール
% wget https://github.com/openssl/openssl/releases/download/openssl-3.4.0/openssl-3.4.0.tar.gz
% tar xvpzf openssl-3.4.0.tar.gz
% cd openssl-3.4.0
% ./config --prefix=$HOME/.local --openssldir=/etc/ssl
% make
% make install_sw
さくらのレンタルサーバーが提供する証明書を利用してHTTPS化する場合は、--openssldir=/etc/ssl
が必要である。これについては、下の記事を参考にさせていただきました。
Python3.13.1のインストール
% wget https://www.python.org/ftp/python/3.13.1/Python-3.13.1.tgz
% tar xvpzf Python-3.13.1.tgz
% cd Python-3.13.1
% ./configure --prefix=$HOME/.local --with-openssl=$HOME/.local --with-openssl-rpath=auto
% make
% make install
--with-open-ssl-rpath=auto
を追加。auto
のときは--with-openssl
に従う。これを指定しないと、CGIで起動したときにlibssl.so、libcrypto.soへのパスが通らないため、認証系のモジュールを使うとAttributeError
が発生する。(2025年1月8日追記)
ここではOpenSSL3.4.0を用いたが、さくらのレンタルサーバーと同じ1.1.1kをホームディレクトリ下にインストールし、これを利用しても同様にインストールできた。しかし、すでにサポート期間が切れているのでどうせなら最新の3.4.0をインストールしといたほうが良い。なお、さくらのレンタルサーバーのOpenSSL1.1.1kを使うとなぜエラーとなるのかはいまだにわかっていない。謎すぎる。
Django5.1のインストール
% pip3 install django
まとめ
さくらのレンタルサーバーのPythonは古く、最新のDjangoやFlaskなどを使うことができない。ところが、さくらのレンタルサーバーのOpenSSLではバージョンが古いため最新のPythonをインストールすることができない。そこで、OpenSSLの最新版をホームディレクトリ下にインストールし、これを使って最新のPythonを構築しインストールした。