でもサーバのOSにCentOS7を選んでしまったので、python3がはいっていない。
手作業でPython3の開発環境を構築してもいいが、初心者なのでサーバを作って壊してを繰り返す予定だし、最近シェルスクリプトを覚えて「なんでもシェルスクリプトで書きたいマン」になっていたので、自動化するためにスクリプトをつくった。
開発環境は以下を想定している。
- CentOS 7.2 64bit
- Python 3.5.1
- pyenv 1.0.0
- pyenv-virtualenv 1.0.0
- pip 7.1.2
自動構築するシェルスクリプト
#! /bin/bash
# 開発に必要な依存関係のパッケージをインストール
sudo yum -y install git
sudo yum -y install zlib-devel readline readline-devel bzip2 bzip2-devel splite sqlite-devel openssl openssl-devel
# pyenvをインストール
git clone https://github.com/yyuu/pyenv.git ~/.pyenv
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
source .bash_profile
# pyenvを使ってPython3をインストール
pyenv install 3.5.1
pyenv rehash
pyenv global 3.5.1
# pyenv-virtualenvをインストール
git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile
exec "$SHELL"
サーバの適当なディレクトリに配置して実行すれば、あっという間にPython3の開発環境ができあがる!
以降でそれぞれの処理の詳細を説明する。
開発に必要な依存関係のパッケージをインストール
Pythonの開発環境をセットアップするのに必要なパッケージをまとめてインストールする。
$ sudo yum -y install git
$ sudo yum -y install zlib-devel readline readline-devel bzip2 bzip2-devel splite sqlite-devel openssl openssl-devel
gitは、pyenvやpyenv-virtualenvのようにyumでインストールできないパッケージをGitHubからクローンするために使う。
zlib-devel readline readline-devel bzip2 bzip2-devel splite sqlite-devel openssl openssl-develは、Pythonの開発環境に必要なパッケージ。
(それぞれがどのパッケージに依存しているかはわからないが、多くの場合上記のパッケージをインストールしている)
pyenvをインストール
pyenv(バージョンが異なるPythonを複数インストールするための管理ツール)をインストールする
$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv
パスを通すために.bash_profileに以下の設定を追記する。
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
最後に.bash_profileの変更を反映する。
$ source .bash_profile
pyenvを使うメリットは、たとえばCentOS7.2にはPython2.7.5がインストールされている。Python2.8がリリースされたとき、そのままインストールすると同じメジャーバージョンの場合は上書きされてしまう。
もし破壊的なバージョンアップが含まれていると、過去にPython2.7.5でつくったプログラムが動かなくなってしまう。でもこれから開発するのは最新のPython2.8を使いたい。
「あー、どっちのバージョンにすればいいんだァァァあ!!!!」
「両方使えるようにすればいいんじゃない?」
「?!」
こんなシチュエーションで威力を発揮するのがpyenv。
この管理ツールを使えば、他に影響を与えることなくPythonのバージョンを管理できる。
pyenvを使ってPython3、pipをインストール
Pythonの最新バージョンをインストールする。
$ pyenv install 3.5.1
$ pyenv rehash
$ pyenv global 3.5.1
pyenv rehashでもろもろの設定情報を更新し、pyenv global 3.5.1でglobal環境(システム全体)のPythonバージョンを3.5.1に変更している。インストール可能なバージョン一覧が見たいときはpyenv install --listを実行するとドバァーっと表示される。
Python3をインストールすると、pipも一緒にインストールされる。
pipとは、JavaScriptのnpm、Rubyのgem、Perlのcpanのようなパッケージ管理ツール。
pip install {package} というコマンドを実行すると、対象のパッケージをインストールしてくれる。
pyenv-virtualenvをインストール
pyenvのプラグイン、pyenv-virtualenv(環境管理ツール)をインストールする。
pyenv-virtualenvをインストールする。
$ git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
パスを通すために、.bash_profileに以下の設定を追記する。
eval "$(pyenv virtualenv-init -)"
最後にシェルを再起動して終了。
$ exec "$SHELL"
さきほどインストールしたpipをそのまま使うと、すべてグローバル環境にインストールされてしまう。それではグローバル環境が汚染されたり、パッケージ間で競合が起きたり、本番環境とインストールされているパッケージが違ったりと、いろんな問題が発生する可能性がある。そこで使うのがvirtualenv。(今回はpyenvのプラグインであるpyenv-virtualenvを使う。無印のvirtualenvもあるので注意)
これを使うと、閉鎖した環境をいくつもつくることができる。
たとえば、このディレクトリはPython3でDjangoを使う。でも別のディレクトリではPython2とFlaskを使う。といったことが可能になる。
使い方は以下のとおり。
$ pyenv virtualenv 3.5.1 webapp
$ mkdir webapp-dir
$ cd webapp-dir
$ pyenv local webapp
(webapp) $ _
以上
written by @bc_rikko
0 件のコメント :
コメントを投稿