さくらのレンタルサーバスタンダードに python3 で pip3 したメモ

当方、Linuxといえば「ls？ 隠しファイル見るのは、えーっと、-aだっけ？」ぐらいの知識しかないです。
が、必要に駆られて、さくらのレンタルサーバにpython3をインストールしました。

参考にしたページ：https://ricom-techno.com/65/

上記ページに書かれている通りやればできました。
素晴らしかったです、記事主さんありがとうございます。

# 失敗を含む作業の流れ

要約は「pythonのバージョンは **3.8じゃなくて3.6** だよ」です。

以下は薄い内容の失敗談なので、お時間がある方はどうぞ。

## python3.8.0を何事もなくインストールしてしまう

pythonのサイト見たら、3.8.0というやつがstableだと書いてありました。
浅はかにも「わかんないけど、新しい方がいいのかなぁ？」と思いました。

さくらにSSHで接続し、ホームディレクトリに居る状態で：

```shell:作業場所作って
% mkdir -p ~/wk/p3
% mkdir -p ~/local/python
```

```shell: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
```
```shell:そしてmake
% 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`という名前になってたけど、それ以外は、[参考ページ](https://ricom-techno.com/65/)通りでした。
ページ作者の方には感謝の念しかありません。

## しかし、モジュールインストールに失敗

けど、本来の目的だったモジュールのインストールができませんでした。

```shell:だめだった
% pip3 install --upgrade gtfs-realtime-bindings
```

ドサーッとたくさんエラーが出てしまいました。
意味はよく理解できなかけど、`ModuleNotFoundError: No module named '_ctypes'`って部分がそれっぽい感じだったので、ググってみたところ、ヒットしたページがこちらです。
https://qiita.com/hitochan777/items/941d4422c53978b275f8
内容はずばりではないけど、エラーメッセージが似てます。

> 3.6系までは普通にインストールできていたのに、3.7をインストールしようとしたら次のようなエラーでインストールに失敗。

とのこと。
もしかしてPythonって、3.7から何かが変わった？
[参考ページ](https://ricom-techno.com/65/)で3.6.8をインストールしてたのはそのせい？
と思い至りました。

「具体的に何がどう変わったか」「本当にそれが原因か」とかいう沼には近寄らず、集合知に感謝しつつ3.6系で試すことにしました。

# python3.6.9を入れなおす

- .cshrcに書き込んだパスやらを削除
- インストールしたPython3と作業場所のディレクトリを `rm -r`でごっそり削除
  - ~/local/python
  - ~/wk/p3

で、改めて3.6の最新版らしき3.6.9をインストール。

```shell
% 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まで](https://www.python.org/downloads/)となっていた、もうやばい。
* 試しに3.10.0をインストールし、pipでモジュールインストールしようとしたら、SSLが無い（the ssl module in Python is not available）と言われて失敗。
* sslモジュールを入れる方法を探し、[先にaptでライブラリ入れとけばいい](https://qiita.com/mookouchi/items/21653db7cebf149be633)という記事を発見するも、さくら（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じゃなくて古いサイト見に行ってるやーん！
…とかをオプションで指定したりして試したけどダメで。

```shell:うまくいきそうで行かなかった例
easy_install --prefix=~/.local --index-url=https://pypi.org/simple gtfs-realtime-bindings
```

いろいろググってるうちに、「さくらはpythonから見れるOpenSSLが古くてダメ」みたいな記事を見かけて諦め、「もういいpython3入れる」となった次第。

そもそもそれ以前に、最初はperlで実装してたのでした。

Windowsのローカルでcpanからもらってきた[Google::ProtocolBuffers](https://metacpan.org/pod/Google::ProtocolBuffers)モジュール使って書いて動いてた。
のだけど、ローカルのLinuxのマシンで動かすとコケた。コケないこともあるからタチが悪い。
仮にさくらで動いたとしても、今後ずっと嫌な感じだから、コケる原因を知りたいけど、調べるのめんどい。

cpanにはもう一つ[Google::ProtocolBuffers::Dynamic](https://metacpan.org/pod/Google::ProtocolBuffers::Dynamic)というモジュールがあって、[使えたよ的なブログ記事](https://codehex.hateblo.jp/entry/2018/12/25/232840)も発見。
が、私の環境ではWindowsもLinuxも、依存モジュールのインストールに失敗したとかでそもそもインストールできず。
失敗した奴がどいつで、どうやったらインストールできるか、とか辿るのが面倒で諦める。

野良モジュールじゃなくGoogle公式で配ってるモジュールなら楽かな、この言語の中ならPythonかなーとなる。

環境の知識が足りなくて諦めが早いと、
プロトコルバッファ読むために、Python3のインストールをすることになる。