ロリポップで、pipパッケージを使うpythonのプログラムを実行する

カテゴリ: クラウド

レンタルサーバのロリポップでは、python2系、3系の実行環境が用意されており、pythonのプログラムを実行させることができます。

今回は、pipパッケージが必要なpythonのプログラムを手元の環境で作成/動作確認し、ロリポップのサーバへ転送して実行させる方法を説明します。

ローカルでの作業

まずは、手元の環境で動作するスクリプトを作成します。 今回はmac上で、pythonのrequestsとBeautifulSoupパッケージを利用したスクリプトを作成してみます。

まず、vendorディレクトリを作り、pipでパッケージをインストールします。

mkdir vendor
pip install requests --target ./vendor
pip install beautifulsoup4 --target ./vendor

インストールしたパッケージが、vendorディレクトリに作成されていることを確認します。

$ ls vendor/

beautifulsoup4-4.6.0.dist-info  chardet             requests-2.19.1.dist-info
bin             chardet-3.0.4.dist-info     urllib3
bs4             idna                urllib3-1.23.dist-info
certifi             idna-2.7.dist-info
certifi-2018.4.16.dist-info requests

プログラムを作る

まず、pythonスクリプトを格納する場所を作ります。どこでも良いのですが、今回はsrcディレクトリの下で管理することにします。

mkdir src

次に、src/の下にスクリプトを作成します。 今回はsrc/test.pyの名前でスクリプトを作成しました。

import os
import sys
# vendor以下をスクリプトの読み込みパスに追加
sys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)), '../vendor'))

# 依存パッケージのロード
import requests
from bs4 import BeautifulSoup


# webページを読み込んでtitleタグのテキストを取得
url = 'https://yahoo.co.jp/'
res = requests.post(url)

soup = BeautifulSoup(res.content, 'html.parser')
title = soup.find('title')

# 取得したテキストを出力
print(title.text)
```language-bash

スクリプトは、指定されたサイトにアクセスし、titleタグの中身を出力するものです。
ローカルのmac環境で実行し、以下のようにタイトルが取得できることがわかりました。
```language-bash
$ python src/test01.py

Yahoo! JAPAN

作成したプログラムを転送する

スクリプトを作成したら、次は作成したスクリプトをロリポップのサーバへ転送します。

プログラムの開発中はサーバの転送を何回も行うため、作業を簡単にするためにスクリプトを作成しておくと良いです。本番サーバへのプログラムを転送することはデプロイ(deploy)とも呼ばれているため、今回はdeploy.shというファイル名で下記のファイルを作成しました。

サーバ名(xxx.jp-xxxxx@ssh999)や、転送先ディレクトリ(~/web/dest)などは、転送先の環境に合わせて書き換えてください。また、転送先ディレクトリは、あらかじめロリポップのサーバ上に作成しておいてください。

#!/bin/bash

scp -r -P 2222 ./src/ ./vendor/ xxx.jp-xxxxx@ssh999.lolipop.jp:~/web/dest

ファイルを作成したらchmodで実行権限を付与します。
chmod 755 deploy.sh

その後、deploy.shを実行します。すると、ログインパスワードの入力待ちになるので、パスワードを入力するとファイルの転送が始まります。(パスワードは、ロリポップの管理画面で確認できます)

$ ./deploy.sh
xxx.jp-xxxxx@ssh999.lolipop.jp's password:

test.py                         100%  306    68.5KB/s   00:00
RECORD                          100% 1390   270.0KB/s   00:00
WHEEL                           100%  110    22.2KB/s   00:00
top_level.txt                   100%    5     0.2KB/s   00:00
LICENSE.txt                     100% 3947   574.5KB/s   00:00
INSTALLER                       100%    4     0.9KB/s   00:00
METADATA                        100% 8866   183.6KB/s   00:00
RECORD                          100% 6164   243.6KB/s   00:00
metadata.json                   100% 1375   218.7KB/s   00:00
...

作成したファイルはtest.pyの1ファイルだけですが、vendorの下にたくさんのファイルがあるため、少し時間がかかります。

転送されたスクリプトをロリポップ上で実行する

転送が終わったら、sshコマンドでロリポップのサーバにログインします。ロリポップでは、sshをポート2222で解放しているため、-p 2222で指定します。

ssh -p 2222 xxx.jp-xxxxx@ssh999.lolipop.jp

ログインしたら、念のためにpythonコマンドの場所やバージョンを確認しておきます。

[xxx.jp-xxxxx@user888 ~]$ which python
/usr/local/bin/python

[xxx.jp-xxxxx@user888 ~]$ python --version
Python 3.4.1

先ほどの例では~/web/testの下に転送していたため、cdコマンドで移動後にスクリプトを実行します。

[xxx.jp-xxxxx@user888 ~]$ cd ~/web/test

[xxx.jp-xxxxx@user888 test]$ ls
src  vendor

[xxx.jp-xxxxx@user888 test]$ python src/test01.py
Yahoo! JAPAN

正しく実行さればOKです。スクリプト上でvendorのディレクトリを指定しているため、pipパッケージも問題なく利用できています。今回作ったスクリプトをcronスクリプトに登録しておくことで、一定時間ごとにコマンド周期を実行することも可能です。

こちらもおススメ

コメントを残す

メールアドレスが公開されることはありません。