LoginSignup
1

posted at

updated at

RailsアプリにPython3系の実行環境構築する

まえおき

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

参考文献

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
1