pythonを実行するならどのレンタルサーバーがよい?
pythonが実行できるレンタルサーバーはいろいろありますが、
「主要レンタルサーバーの中でコスパNo.1」「サーバー環境の扱いやすさ」からロリポップ!がおすすめです。
ここでは、私が試行錯誤しながら実際に試してみたことをメモしておきます。
最初はさくらインターネットにしてみたけど・・・
さくらインターネットはcronを利用するためにスタンダードプラン以上の契約が必要ですが、
スタンダードプランは月額425円〜と安いし、python3.8が使えるということで最初に試してみました。
結論から言うと、、、「追加モジュールが使えない・・・orz」
ネット上にある「さくらインターネットでpythonを動かす手順」を紹介した記事は、python2.7がインストールされていた当時の内容が多くて、2023年のOSアップデートによりpython3.8が使える環境になってからのものは少ないんですよね。。
そんな中、いろいろと調べながらやってみました。
1.pipをインストール
まずはpipをインストールしました。
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
でファイルにダウンロードしておいて、
python get-pip.py --user
でインストール。
これは問題なくできました。
2.追加モジュールをインストール
次に、pipを使ってpythonの追加モジュールをインストールします。
今回はparamikoとpandasを使用したいと思って、
PATHは設定せずに
cd .local/bin
でbinへ移動して、まずはparamikoをインストールするためにnumpyが必要なので
python pip install numpy
python pip install paramiko
を実行しました。
numpyのインストールは成功しましたが、paramikoのインストールができません。
subprocess-exited-with-errorが出ます。
pandasのインストールもできません・・・
同じくsubprocess-exited-with-errorが出ます。
さらに調べてみたところ、wheelとsetuptoolsをバージョンアップしたらpandasが動いたという人がいたので、
python pip install -U wheel
python pip install -U setuptools
を実行した後に再度pandasをインストールしてみましたが、エラーは解決しませんでした。。。
numpyとpandasのバージョンを古いものにすればインストールできたかもしれない(そうやって動いたという人がいた)のですが、その情報もさくらインターネットにpython2.7がインストールされていた頃の内容。
さらに、
python pip check
を実行してモジュール間の依存関係をチェックしてみたところ、pyopensslとcryptographyの依存関係にエラーが・・・
pyopenssl 20.0.1 has requirement cryptography>=3.2, but you have cryptography 2.9.2.
元からこうなのかな・・・ということで、ここであきらめました。
さくらインターネットはOSがFreeBSDだからなのか・・・?
原因はわかりませんが、もっと手軽にpipが使えるレンタルサーバーはないものか・・・
ということで、
次にロリポップ!を使ってみた
まず、python と打ってみる。
2.7.5だった・・・ えー、3.7が使えるはずなのに・・・と思いましたが、
python3 と打ったら大丈夫だった。。よかった。
1.pipをインストール
さくらのときと同様に、まずはpipのインストールをやってみます。
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
でファイルにダウンロードしておいて、
python get-pip.py --user
でインストール。
ここでエラーが出てしまいました・・・でも、python3.7用のget-pip.pyを使えばよさそう。
言われた通り、3.7用を使ってやり直し。
よし、ロリポップ!でも問題なくできました。
pipとpip3がインストールされましたが、pipはpython2用と思われるので、pip3のほうを使います。
2.追加モジュールをインストール
こちらもさくらのときと同様に、pipを使ってpythonの追加モジュールをインストールします。
今回はparamikoとpandasを使用したいので
PATHは設定せずに
cd .local/bin
でbinへ移動して、まずは
python pip3 install numpy
python pip3 install paramiko
を実行しました。
が、ここでエラーが・・・「コマンドが見つかりません」
ロリポップ!ではPATHを設定しないとダメなのか・・・
ということで、PATHを設定します。
そして、
python pip3 install numpy
python pip3 install paramiko
をもう一度実行したところ、うまくインストールできました!
続いて、pandasもインストール。
python pip3 install pandas
こちらもうまくいきました。よしよし。
3.cron設定の前準備
ここまで来ればもう少し。最後にcronの設定をします。
cronに設定する実行ファイルはシェルスクリプト(.shファイル)である必要があるため、
最初にpythonのプログラムを実行するシェルスクリプトを作成します。
#!/bin/bash cd cd ./web/python /usr/local/bin/python3 test.py
そして、今回実行するpythonのプログラムを作成します。(test.py)
私はLINEのnotify通知(https://notify-bot.line.me/ja/)をするプログラムを作りましたが、別に何でもよいです。
ここまで出来たら、これら2つのファイルをレンタルサーバーにアップロードして実行します。
1. FTPでレンタルサーバーにつないで、webの下にpythonというフォルダを作成する
2. test.pyをweb/pythonの下にアップロードする
3. test.shをwebの下にアップロードする
4. SSHでレンタルサーバーにログインする
5. 以下のコマンドを実行して、test.shに実行権限をつける
cd web
chmod 755 test.sh
6. 以下のコマンドを実行して、test.shを実行
./test.sh
----
これで、コンソールに Hello World と表示されたら事前準備はOKです。
4.cronの設定
いよいよ最後。cronの設定をします。
設定名は任意で、日付・曜日・時間は実行したい時間(間隔)を設定します。
実行ファイルパスは「~~/web/以下のパスをご入力ください」とのことで、
webの下にアップロードしたスクリプトファイル(test.sh)を実行したいので
test.sh
と入力して、最後に[設定]ボタンを押します。
これで、設定した時間にpythonのプログラムが実行されました!!
まとめ
pythonが実行できるレンタルサーバーはいろいろありますが、
「主要レンタルサーバーの中でコスパNo.1」「サーバー環境の扱いやすさ」からロリポップ!がおすすめです。
さくらインターネットはpipがうまく動作しませんでした。初心者にはハードルが高いです。
参考ページ
https://pico.inc/web/python/#index_id13
https://qiita.com/renren5977/items/b2dd5c8f89579d8efe3a
https://qiita.com/KEy2376/items/7b00870063381db850bb
https://step-learn.com/article/python/166-lolipop-pip.html
https://rtmrw.muragon.com/entry/30.html#google_vignette
lolipopサーバーでpythonを実行しようとしたらライブラリがOpenSSLのバージョンに対応してないエラーが出た
さくらインターネットでも、以下でpandasをインストールできました。
% mkdir tmp
% setenv TEMP ~/tmp
% pip install pandas
% pip install pandas のみでエラーとなっていた原因ですが、 /tmp (実体は /var/tmp) のある /var パーティションが “noexec” オプション付きでマウントされているためのようです。
pandas のインストールの途中でソースが /tmp 下に展開されるが、 noexec のついたパーティションにあるので、configure スクリプト(先頭行が #!/bin/sh)が bad interpreter となって起動できない。
そこで、pip に対して一時ディレクトリを ~/tmp にせよと TEMP 環境変数で指示することによって回避できるようです。
参考:
http://kajits.sblo.jp/article/189693599.html