ちょっと話題の記事

virtualenvを使っていろいろなライブラリを手軽にためそう

2015.06.19

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

サーモン大好き横山です。
Pythonを使うとき、システムの環境を汚さずPythonのコードを書くときに便利です。
今回その導入方法を説明していきたいと思います。

Pythonのバージョンごとのvirtualenvのインストール

Amazon Linux 2015.03を使う場合に、新規AMIから使う場合と2014.09以前からアップグレードしてきた場合とで、
Pythonのバージョンが異なる事があります。

以下、バージョンによってvirtualenvのインストールして下さい。

Python2.7系の場合

$ python -V
Python 2.7.9

$ sudo yum list installed | grep python27-virtualenv
(何も表示されなければ、インストールされていない)
$ sudo yum install -y python27-virtualenv

Python2.6系の場合

$ python -V
Python 2.6.9

$ sudo yum list installed | grep python26-virtualenv
(何も表示されなければ、インストールされていない)
$ sudo yum install -y python26-virtualenv

virtualenvの準備

Python2.6と2.7の比較を行おうと思いますので、python2.6系のインストールをします。

$ sudo yum list installed | grep python26
(何も表示されなければインストールされていない)
$ sudo yum install -y python26
$ sudo yum list installed | grep python26
python26.x86_64                       2.6.9-1.80.amzn1             @amzn-updates
python26-libs.x86_64                  2.6.9-1.80.amzn1             @amzn-updates

次に、virtualenvの環境を作っていきます。
virtualenvの環境を作る時は、$ virtualenv -p [Pythonの場所] [環境名]で作る事が出来ます。
作った環境は、作ったディレクトリの中に[環境名]/としてディレクトリが作成されます。

$ mkdir -p /tmp/virtualenv/
$ cd !:2
cd /tmp/virtualenv

$ virtualenv -p /usr/bin/python26 venv26
Running virtualenv with interpreter /usr/bin/python26
New python executable in venv26/bin/python26
Also creating executable in venv26/bin/python
Installing setuptools, pip...done.

$  virtualenv -p /usr/bin/python27 venv27
Running virtualenv with interpreter /usr/bin/python27
New python executable in venv27/bin/python27
Also creating executable in venv27/bin/python
Installing setuptools, pip...done.

$ ls -l
drwxrwxr-x 5 ec2-user ec2-user 4096  6月 19 03:46 venv26
drwxrwxr-x 7 ec2-user ec2-user 4096  6月 19 03:44 venv27

virtualenvの使用例

virtualenvの環境の中に入る

$ . [環境名]/bin/activateで入ることが出来ます。

環境の中に入ったときpromptの先頭に(環境名)が付きます。

$ . venv26/bin/activate
(venv26)$ which python
/tmp/virtualenv/venv26/bin/python
(venv26)$ python -V
Python 2.6.9
$ . venv27/bin/activate
(venv27)$ which python
/tmp/virtualenv/venv27/bin/python
(venv27)$ python -V
Python 2.7.9

virtualenvの環境から出る

$ deactivateで入ることが出来ます。

環境から出たたときprompt先頭に付いていた(環境名)が消えます。

(venv26)$ deactivate
$
(venv27)$ deactivate
$

環境毎にパッケージを自由に入れることが出来る

環境毎にpipを使用して、パッケージのインストールをすることが出来ます。
このインストールは他の環境、システムのライブラリに影響を与えません。

(venv27)$ pip install ipython
You are using pip version 6.0.8, however version 7.0.3 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
Collecting ipython
  Downloading ipython-3.1.0-py2-none-any.whl (3.4MB)
    100% |################################| 3.4MB 157kB/s
Installing collected packages: ipython

Successfully installed ipython-3.1.0
(venv27)$ pip freeze
ipython==3.1.0
(venv27)$ ipython
Python 2.7.9 (default, Apr  1 2015, 18:18:03)
Type "copyright", "credits" or "license" for more information.

IPython 3.1.0 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

In [1]: exit()
(venv27)$ deactivate


$ . venv26/bin/activate
(venv26)$ pip freeze
(venv26)$ ipython
-bash: ipython: コマンドが見つかりません
(venv26)$

動作確認

今回はPython2.7から入った辞書内包記法が動くかどうか試してみようと思います。

確認用のソースコード

  • test.py
#!/usr/bin/env python
print {i:2**i for i in range(10)}

実行

  • Python2.6の場合
$ . venv26/bin/activate
(venv26)$ python test.py
  File "test.py", line 2
    print {i:2**i for i in range(10)}
                    ^
SyntaxError: invalid syntax
  • Python2.7の場合
$ . venv27/bin/activate
(venv27)$ python test.py
{0: 1, 1: 2, 2: 4, 3: 8, 4: 16, 5: 32, 6: 64, 7: 128, 8: 256, 9: 512}

まとめ

複数Pythonのバージョンをチェックするときに、
virtualenvを使用して、システム内部のPythonライブラリを汚さずに色々と試すことができます。