Foreverly

メモ帳

CentOSにPythonの環境構築

Pythonの環境構築についてです。 pyenv,virtualenv,pyvenvとややこしくて困惑しました。 私と同じような人は(ここを読むといいかも)http://qiita.com/nobolis/items/12a464557f2ae007e9a1

githubからpyenvをチェックアウトします。

# git clone https://github.com/yyuu/pyenv.git ~/.pyenv

PyenvのPathを通します。

# echo 'export PYENV_ROOT=$HOME/.pyenv' >> ~/.bash_profile
# echo 'export PATH=$PYENV_ROOT/bin:$PATH' >> ~/.bash_profile
# echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
# echo $PYENV_ROOT

設定を保存します。

# source ~/.bash_profile
# echo $PYENV_ROOT
/root/.pyenv
# echo $HOME
/root

zshを使用している人はsource ~/.zshenvなどに変更します。

インストールできるバージョンを確認します。

# pyenv install -l

2.7.12をインストールします。

# pyenv install 2.7.12
Downloading Python-2.7.12.tar.xz...
-> https://www.python.org/ftp/python/2.7.12/Python-2.7.12.tar.xz
Installing Python-2.7.12...
WARNING: The Python bz2 extension was not compiled. Missing the bzip2 lib?
Installed Python-2.7.12 to /root/.pyenv/versions/2.7.12

WARNINGがでました。

こちらを参考にbuildします。Common build problems

# yum install zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl-devel

今回はbzip2-develがないことがWARNINGの原因でした。

再インストールしてWARNINGが出ないことを確認しました。

# pyenv install 2.7.12
pyenv: /root/.pyenv/versions/2.7.12 already exists
continue with installation? (y/N) y
Downloading Python-2.7.12.tar.xz...
-> https://www.python.org/ftp/python/2.7.12/Python-2.7.12.tar.xz
Installing Python-2.7.12...
Installed Python-2.7.12 to /root/.pyenv/versions/2.7.12

次に3.5.2をインストールします。

# pyenv install 3.5.2
pyenv: /root/.pyenv/versions/3.5.2 already exists
continue with installation? (y/N) y
Downloading Python-3.5.2.tar.xz...
-> https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tar.xz
Installing Python-3.5.2...
Installed Python-3.5.2 to /root/.pyenv/versions/3.5.2

デフォルトのPythonのversionは2.6.6でした。 早速2.7.12に変えてみます。

# python --version
Python 2.6.6
# pyenv
--version           exec                hooks               local               root                uninstall           version-file-read   version-origin      which
commands            global              init                prefix              shell               version             version-file-write  versions
completions         help                install             rehash              shims               version-file        version-name        whence
# pyenv global 2.7.12
# python --version
Python 2.7.12

pipを最新のものにしましょう。

[root@shuhei src]# pip install --upgrade pip
Collecting pip
  Downloading pip-8.1.2-py2.py3-none-any.whl (1.2MB)
    100% |████████████████████████████████| 1.2MB 617kB/s
Installing collected packages: pip
  Found existing installation: pip 8.1.1
    Uninstalling pip-8.1.1:
      Successfully uninstalled pip-8.1.1
Successfully installed pip-8.1.2

virtualenvは、同じ(python)バージョンで違う環境を作成するためのものです。

インストールして設定を.bash_profileに書き込みます。

# git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
# echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile
# source ~/.bash_profile

新しいpython環境の作成は、pyenv virtualenv [version] <virtualenv-name>で作成できます。 ここでは3.5.2の環境のnew_3.5.2を作成してみます。

# pyenv virtualenv 3.5.2 new_3.5.2
Ignoring indexes: https://pypi.python.org/simple
Requirement already satisfied (use --upgrade to upgrade): setuptools in /root/.pyenv/versions/3.5.2/envs/new_3.5.2/lib/python3.5/site-packages
Requirement already satisfied (use --upgrade to upgrade): pip in /root/.pyenv/versions/3.5.2/envs/new_3.5.2/lib/python3.5/site-packages

pyvenvは2.7系ではインストールされていませんでした。3.3以降を使用している人向けですね。

# python --version
Python 2.7.12
# pyvenv tutorial-env
pyenv: pyvenv: command not found

The `pyvenv' command exists in these Python versions:
  3.5.2

pyenvの他の環境作成の方法として、pyvenvについて Pythonチュートリアルに説明が記載されていました。

仮想環境を置きたいディレクトリに移動して、 pyvenvに仮想環境のディレクトリ名をつけて実行すればよいです。 ここでの仮想環境とはアプリケーションが依存するソフトウェアを格納したディレクトリのことです。 仮想環境は環境変数を利用して切り替えを行います。virtualenvではPythonの パッケージをシステムディレクトリやユーザーディレクトリに配置するのではなく、 アプリケーション専用の分離されたディレクトリに配置します。 これにより、プロジェクト毎に利用するPythonバイナリや依存ライブラリを 簡単に切り替えることができるようになります。

utorial-envというディレクトリを作り、Pythonインタープリタ、標準ライブラリなどの サポートファイルをディレクトリツリーを生成します。 また、生成し仮想環境はアクティベートする必要があります。 virtualencをアクティベートすると、シェルのプロンプトが使っているvirtualenvを示すものに変わり、 またpythonを入力した時に、特定バージョンの指定のインストール実体が実行されるように環境が変わります。

# pyenv global 3.5.2
# pyvenv tutorial-env
# source tutorial-env/bin/activate
(tutorial-env) # python
Python 3.5.2 (default, Jul 18 2016, 05:05:01)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-17)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', '/root/.pyenv/versions/3.5.2/lib/python35.zip', '/root/.pyenv/versions/3.5.2/lib/python3.5', '/root/.pyenv/versions/3.5.2/lib/python3.5/plat-linux', '/root/.pyenv/versions/3.5.2/lib/python3.5/lib-dynload', '/root/.pyenv/tutorial-env/lib/python3.5/site-packages']