EC2上でvirtualenvを使ってpython3.4 with Boto3の独立した環境を作成する
小ネタです。
Amazon EC2上でPythonを使う際、状況に拠ってはPython3系を用意したいという場合があるかと思いますが、現行新規に作成したEC2(Amazon Linux AMI)の場合は環境がPython3系ではありません。
この環境に手を加えてPython3系の環境を準備する手段は幾つかあるかと思いますが、AWSプレミアムサポートのナレッジベースのページに、virtualenvを使った非常にシンプルな環境準備の方法が展開されていましたのでサクッとご紹介してみたいと思います。
まずはじめにEC2環境を用意します。起動時点でのAmazon Linux AMIを選択し、インスタンスを起動。
サーバにログインし各種更新作業を行います。
$ ssh -i xxxxxxxxxx.pem ec2-user@xxx.xxx.xxx.xxx $ sudo yum -y update
現行Pythonのコマンドフルパスとバージョンを確認してみます。この時点ではPython2.7が導入済の状態となっています。
$ which python /usr/bin/python $ python Python 2.7.10 (default, Jul 20 2016, 20:53:27) [GCC 4.8.3 20140911 (Red Hat 4.8.3-9)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>>
botoのimportは問題無く行えている状況です。
>>> import boto >>> exit()
次いで、Python3.4をyumでインストール。
$ sudo yum -y install python34 $ which python34 /usr/bin/python34
これらの環境が揃ったところで、virtualenvを使って切り替える設定を施して行きます。venvフォルダを作成&移動し、
$ pwd /home/ec2-user $ mkdir venv $ cd venv/ $ pwd /home/ec2-user/venv $
virtualenvコマンドを使って環境設定を実施。
$ virtualenv -p /usr/bin/python3.4 python34 Running virtualenv with interpreter /usr/bin/python3.4 Using base prefix '/usr' New python executable in pytho34/bin/python3.4 Also creating executable in pytho34/bin/python Installing setuptools, pip...done. $
sourceコマンドを使って設定を有効化します。
$ source /home/ec2-user/venv/python34/bin/activate
改めてPythonのコマンドフルパスを確認。Python3.4の連携が為されました。
$ which python ~/venv/pytho34/bin/python
boto3をインストールし、pythonインタプリタ上でboto3をimportしてみます。こちらも問題無く実行出来ました。
$ pip install boto3 You are using pip version 6.0.8, however version 8.1.2 is available. You should consider upgrading via the 'pip install --upgrade pip' command. Collecting boto3 Downloading boto3-1.4.0-py2.py3-none-any.whl (117kB) 100% |################################| 118kB 2.8MB/s Collecting botocore<1.5.0,>=1.4.1 (from boto3) Downloading botocore-1.4.48-py2.py3-none-any.whl (2.6MB) 100% |################################| 2.6MB 211kB/s Collecting s3transfer<0.2.0,>=0.1.0 (from boto3) Downloading s3transfer-0.1.2-py2.py3-none-any.whl (49kB) 100% |################################| 49kB 6.8MB/s Collecting jmespath<1.0.0,>=0.7.1 (from boto3) Downloading jmespath-0.9.0-py2.py3-none-any.whl Collecting python-dateutil<3.0.0,>=2.1 (from botocore<1.5.0,>=1.4.1->boto3) Downloading python_dateutil-2.5.3-py2.py3-none-any.whl (201kB) 100% |################################| 204kB 1.4MB/s Collecting docutils>=0.10 (from botocore<1.5.0,>=1.4.1->boto3) Downloading docutils-0.12-py3-none-any.whl (508kB) 100% |################################| 512kB 1.0MB/s Collecting six>=1.5 (from python-dateutil<3.0.0,>=2.1->botocore<1.5.0,>=1.4.1->boto3) Downloading six-1.10.0-py2.py3-none-any.whl Installing collected packages: six, docutils, python-dateutil, jmespath, s3transfer, botocore, boto3 : Successfully installed boto3-1.4.0 botocore-1.4.48 docutils-0.12 jmespath-0.9.0 python-dateutil-2.5.3 s3transfer-0.1.2 six-1.10.0 (pytho34)$ $ $ python Python 3.4.3 (default, Jul 20 2016, 21:31:36) [GCC 4.8.3 20140911 (Red Hat 4.8.3-9)] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import boto3 >>> exit()
Python3.4連携設定の無効化についてはdeactivateコマンドを使います。
$ deactivate $ which python /usr/bin/python
もしサーバログイン時にこの設定を有効化させたい場合は以下の様な処理を実行しておくと良さげです。
$ echo "source /home/ec2-user/venv/python34/bin/activate" >> /home/ec2-user/.bashrc
まとめ
非常に簡単且つシンプルなものではありましたが、意外と利用ケースはありそうだなと思って改めて書き起こしてみました。皆様もPython3系環境を手っ取り早く用意したい!という場合、この手法を使って設定してみてはいかがでしょうか?こちらからは以上です。