当方、Linuxといえば「ls? 隠しファイル見るのは、えーっと、-aだっけ?」ぐらいの知識しかないです。
が、必要に駆られて、さくらのレンタルサーバにpython3をインストールしました。
参考にしたページ:https://ricom-techno.com/65/
上記ページに書かれている通りやればできました。
素晴らしかったです、記事主さんありがとうございます。
失敗を含む作業の流れ
要約は「pythonのバージョンは 3.8じゃなくて3.6 だよ」です。
以下は薄い内容の失敗談なので、お時間がある方はどうぞ。
python3.8.0を何事もなくインストールしてしまう
pythonのサイト見たら、3.8.0というやつがstableだと書いてありました。
浅はかにも「わかんないけど、新しい方がいいのかなぁ?」と思いました。
さくらにSSHで接続し、ホームディレクトリに居る状態で:
% mkdir -p ~/wk/p3
% mkdir -p ~/local/python
% cd ~/wk/p3
% wget --no-check-certificate https://www.python.org/ftp/python/3.8.0/Python-3.8.0.tgz
% tar -zxvf ./Python-3.8.0.tgz
% cd ./Python-3.8.0
% ./configure CPPFLAGS="-I/usr/local/ssl/include" LDFLAGS="-L/usr/local/ssl/lib" --prefix=$HOME/local/python
% make
% make install
インストールはうまくいきました。
pip
がpip3
という名前になってたけど、それ以外は、参考ページ通りでした。
ページ作者の方には感謝の念しかありません。
しかし、モジュールインストールに失敗
けど、本来の目的だったモジュールのインストールができませんでした。
% pip3 install --upgrade gtfs-realtime-bindings
ドサーッとたくさんエラーが出てしまいました。
意味はよく理解できなかけど、ModuleNotFoundError: No module named '_ctypes'
って部分がそれっぽい感じだったので、ググってみたところ、ヒットしたページがこちらです。
https://qiita.com/hitochan777/items/941d4422c53978b275f8
内容はずばりではないけど、エラーメッセージが似てます。
3.6系までは普通にインストールできていたのに、3.7をインストールしようとしたら次のようなエラーでインストールに失敗。
とのこと。
もしかしてPythonって、3.7から何かが変わった?
参考ページで3.6.8をインストールしてたのはそのせい?
と思い至りました。
「具体的に何がどう変わったか」「本当にそれが原因か」とかいう沼には近寄らず、集合知に感謝しつつ3.6系で試すことにしました。
python3.6.9を入れなおす
- .cshrcに書き込んだパスやらを削除
- インストールしたPython3と作業場所のディレクトリを
rm -r
でごっそり削除- ~/local/python
- ~/wk/p3
で、改めて3.6の最新版らしき3.6.9をインストール。
% mkdir -p ~/wk/p3
% mkdir -p ~/local/python
% cd ~/wk/p3
% wget --no-check-certificate https://www.python.org/ftp/python/3.6.9/Python-3.6.9.tgz
% tar -zxvf ./Python-3.6.9.tgz
% cd ./Python-3.6.9
% ./configure CPPFLAGS="-I/usr/local/ssl/include" LDFLAGS="-L/usr/local/ssl/lib" --prefix=$HOME/local/python
% make
% make install
で、パスやらなにやらをあれこれして、pip3で無事、目的のモジュールのインストールもできたのでした。
良かった。
追加情報
2020年1月31日。
メモしておいたこのページを参考に、さくらの別サーバで同じことをやろうとして気が付く。
- Python 3.6 の最新は、3.6.10 になってた
- security-fixes …?って、stable(安定版)から落ちてるやん。
どこかのタイミングで、新しいバージョンでうまくいくか再挑戦しないとなー、と思いつつ、粛々と3.6.10をインストール。
2021年10月28日。
またもやさくらの別サーバで同じことをやる。
- Python3.6 の最新は3.6.15
- 3.6のサポートが2021-12-23までとなっていた、もうやばい。
- 試しに3.10.0をインストールし、pipでモジュールインストールしようとしたら、SSLが無い(the ssl module in Python is not available)と言われて失敗。
- sslモジュールを入れる方法を探し、先にaptでライブラリ入れとけばいいという記事を発見するも、さくら(FreeBSD)でaptって使えるのかな、あきらめて3.6.15を入れるかもしれない(いまここ)
雑談:そもそもなぜpythonのインストールなどをしているのか
「GTFSリアルタイム」という交通の運行状況のデータを見たかった。
そのために、プロトコルバッファ(というデータ形式)を扱う必要があった。
ので、Googleさん提供のモジュールを使いたかった。
https://developers.google.com/transit/gtfs-realtime?hl=ja
ので、以下雑談はプロトコルバッファの話。
上記公式に、pip
とeasy_install
のインストール例が載ってて、さくらにSSH接続してたらeasy_install
のコマンドが通ったので、それで入れようとしたのでした。
さくらのeasy_installよ、pypi.orgじゃなくて古いサイト見に行ってるやーん!
…とかをオプションで指定したりして試したけどダメで。
easy_install --prefix=~/.local --index-url=https://pypi.org/simple gtfs-realtime-bindings
いろいろググってるうちに、「さくらはpythonから見れるOpenSSLが古くてダメ」みたいな記事を見かけて諦め、「もういいpython3入れる」となった次第。
そもそもそれ以前に、最初はperlで実装してたのでした。
WindowsのローカルでcpanからもらってきたGoogle::ProtocolBuffersモジュール使って書いて動いてた。
のだけど、ローカルのLinuxのマシンで動かすとコケた。コケないこともあるからタチが悪い。
仮にさくらで動いたとしても、今後ずっと嫌な感じだから、コケる原因を知りたいけど、調べるのめんどい。
cpanにはもう一つGoogle::ProtocolBuffers::Dynamicというモジュールがあって、使えたよ的なブログ記事も発見。
が、私の環境ではWindowsもLinuxも、依存モジュールのインストールに失敗したとかでそもそもインストールできず。
失敗した奴がどいつで、どうやったらインストールできるか、とか辿るのが面倒で諦める。
野良モジュールじゃなくGoogle公式で配ってるモジュールなら楽かな、この言語の中ならPythonかなーとなる。
環境の知識が足りなくて諦めが早いと、
プロトコルバッファ読むために、Python3のインストールをすることになる。