virtualenvを使っていろいろなライブラリを手軽にためそう
サーモン大好き横山です。
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ライブラリを汚さずに色々と試すことができます。