まえおき
Railsを使ったプロジェクトにて大量レコードをエクセルに書き込む処理があるのだが、
使用していたRubyライブラリの「RubyXL」ではメモリ効率や出力速度に限界があり、「数十時間出力にかかる」、「出力する前にメモリ枯渇」するなどの問題があった。
Rubyには他にもエクセルのライブラリがあるが、書式設定などが自由にできないものが多く採用に至らず。
調査したところ現状の仕様を満たすかつ、メモリ効率が高いライブラリとしてPythonに「openpyXL」というものあったので導入した。
そこでRailsアプリ内でPythonを実行するための環境を用意する必要が出てきた。
なお単発的にRubyファイルからシェルスクリプトを経由してPythonファイルを実行する想定。
特にバージョン管理は必要ないのでPyenvは無し。
環境
- GCE
- OS:CentOS7
- 言語:Ruby(2.2.2)
- フレームワーク:Rails(4.2.5)
環境のチェックなど
①OSのバージョン確認
cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
②デフォルトのpythonのバージョン確認
python --version
Python 2.7.5
※CentOS7系はpython2系に依存している部分があるっぽいのでアンインストールなどはしない。
③pythonのインストール詳細状況の確認
ls /usr/bin | grep python
abrt-action-analyze-python
python
python2
python2.7
Pythonのインストール
■yumの準備
①リポジトリの追加
yum install -y https://repo.ius.io/ius-release-el7.rpm
②リポジトリが作成できたか確認
ls /etc/yum.repos.d | grep ius
ius-archive.repo
ius-testing.repo
ius.repo
■python3のインストール
①最新版のpythonを探します。
yum search python36
②必要なパッケージをインストールします。
yum install -y python36u python36u-libs python36u-devel python36u-pip
③パッケージが実際に追加されたことを確認
ls /usr/bin/ | grep python
abrt-action-analyze-python
python
python2
python2.7
python3
python3-config
python3.6
python3.6-config
python3.6m
python3.6m-config
python3.6m-x86_64-config
インストールしただけでは、pythonコマンドはversion2を参照します。
python --version
Python 2.7.5
python3を参照するにはpython3コマンドを利用します。
python3 --version
Python 3.6.8
エイリアス設定
①pythonコマンドでpython3が実効されるようにaliasで指定
alias python='/usr/bin/python3'
alias | grep python
alias python='/usr/bin/python3'
python --version
Python 3.6.8
②.bashrcに書き込み
再起動したときにエイリアスの設定がキャッシュクリアされてしまうので、.bashrcにエイリアス追加しておく。
vi ~/.bashrc
#.bashrc
#Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
#Uncomment the following line if you don't like systemctl's auto-paging feature:
#export SYSTEMD_PAGER=
#User specific aliases and functions
alias python='/usr/bin/python3'
ライブラリのインストール
ライブラリマネージャであるpipをインストールし、pipでエクセル関連のライブラリをインストールする。
①pipのインストール
python -m pip install --upgrade pip
②openpyXLのインストール
pip install openpyxl
③lxmlのインストール
pip install lxml
参考文献