Amazon Linux2にvenv/Anacondaで隔離されたPython3環境を構築

2017.12.24

Amazon Web Services (AWS) が提供しているAmazon Linuxに新世代のAmazon Linux 2(以下AL2)がリリースされました。

AL2にはデフォルトでは Python 2.7 系がインストールされているため、Python3 を利用したい開発者向けに

  • Python インストール後に venv で環境構築
  • Anaconda で Python まるごとまるっとインストール

それぞれで Python 3.6 向けの環境を構築する方法を紹介します。

環境構築は一部宗教論争的な側面もありますが、個人的には

  • venv : Python で何かやりたい人向け
  • Anaconda : ソフトウェアが Python で書かれているので Python 実行環境が必要な人向け

というような印象を持っています。

AL2デフォルトのPythonは2.7.14

AL2にはデフォルトで Python 2.7.14 がインストールされています。

$ python -V
Python 2.7.14

venv で環境構築

venv とは

venv は Python3系向けの仮想環境を構築するモジュールです。 以前は pyvenv コマンドで仮想環境を構築することが推奨されていましたが、3.6 以降は deprecated 扱いです。

Note The pyvenv script has been deprecated as of Python 3.6 in favor of using python3 -m venv to help prevent any potential confusion as to which Python interpreter a virtual environment will be based on.

https://docs.python.org/3/library/venv.html

Python3 をインストール

AL2 にデフォルトでインストールされているPythonは2.7のため、3 系 Python を YUM でインストールします。

$ yum search python3
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
============================= N/S matched: python3 =============================
python3-pip.noarch : A tool for installing and managing Python3 packages
python3-test.x86_64 : The self-test suite for the main python3 package
python3.x86_64 : Interpreter of the Python programming language
python3-Cython.x86_64 : A language for writing Python extension modules
python3-debug.x86_64 : Debug version of the Python runtime
python3-devel.x86_64 : Libraries and header files needed for Python development
python3-libs.x86_64 : Python runtime libraries
python3-libs.i686 : Python runtime libraries
python3-rpm-macros.noarch : RPM macros for building Python 3 packages
python3-setuptools.noarch : Easily build and distribute Python 3 packages
python3-tkinter.x86_64 : A GUI toolkit for Python
python3-tools.x86_64 : A basic graphical development environment for Python
python3-wheel.noarch : A built-package format for Python

  Name and summary matches only, use "search all" for everything.
$ sudo yum install -y python3

動作確認

$ python3 -V
Python 3.7.0rc1

隔離された仮想環境を作成

venv モジュールで仮想環境を作成します。

シンタックスは python3 -m venv /path/to/new/virtual/environment です。

$ python3 -m venv test-venv
$ source test-venv/bin/activate

仮想環境から抜けるときは $ deactivate を実行するだけです。

モジュール管理

モジュールをインストールするには $ python3 -m pip install コマンドを使います

$ python3 -m pip install requests
...

インストール済みモジュール一覧を確認するには $ python3 -m pip freeze コマンドを使います。

$ python3 -m pip freeze
certifi==2018.11.29
chardet==3.0.4
idna==2.8
requests==2.21.0
urllib3==1.24.1

補足:YUM vs amazon-linux-extras

Amazon Linux 2リリース当初はPython3パッケージはYUMでは提供されておらず、amazon-linux-extras 経由で提供されていました。

$ sudo amazon-linux-extras
  0  ansible2   disabled  [ =2.4.2 ]
  1  emacs   disabled  [ =25.3 ]
  2  memcached1.5   disabled  [ =1.5.1 ]
  3  nginx1.12   disabled  [ =1.12.2 ]
  4  postgresql9.6   disabled  [ =9.6.6 ]
  5  python3=latest  disabled  [ =3.6.2 ]
  6  redis4.0   disabled  [ =4.0.5 ]
...

一方で extras パッケージは core に格上げすることがあります。

Q. Will packages in extras be moved to “core” with Long Term Support? Over time, rapidly evolving technologies in extras will continue to mature and stabilize and may be added to the Amazon Linux 2 "core" to which the Long Term Support policies apply.

https://aws.amazon.com/amazon-linux-2/faqs/

2018年12月時点では、Python3パッケージは core に格上げされたため、amazon-linux-extrasには存在しません。

Anaconda で環境構築

Anaconda はデータサイエンス・機械学習向けの Python プラットフォームです。 「プラットフォーム」らしく、Python だけでなく、パッケージ管理、頻繁に利用されるライブラリなど、諸々が一緒にインストールされます。

インストーラーのダウンロード

次のダウンロードページから CUI インストーラーをダウンロードします。

Downloads

$ URL=https://repo.continuum.io/archive/Anaconda3-5.0.1-Linux-x86_64.sh
$ wget $URL

インストール

インストーラーをシェル(Bash)で呼び出すだけです

$ bash Anaconda3-5.0.1-Linux-x86_64.sh

Welcome to Anaconda3 5.0.1

In order to continue the installation process, please review the license
agreement.
Please, press ENTER to continue
>>>

...

Do you accept the license terms? [yes|no]
[no] >>> yes  # ここで yes

Anaconda3 will now be installed into this location:
/home/ec2-user/anaconda3

  - Press ENTER to confirm the location
  - Press CTRL-C to abort the installation
  - Or specify a different location below

[/home/ec2-user/anaconda3] >>> # ここで ENTER
PREFIX=/home/ec2-user/anaconda3
installing: python-3.6.3-hc9025b9_1 ...

...


installation finished.
Do you wish the installer to prepend the Anaconda3 install location
to PATH in your /home/ec2-user/.bashrc ? [yes|no]
[no] >>> yes

Appending source /home/ec2-user/anaconda3/bin/activate to /home/ec2-user/.bashrc
A backup will be made to: /home/ec2-user/.bashrc-anaconda3.bak


For this change to become active, you have to open a new terminal.

Thank you for installing Anaconda3!

動作確認

$ which python3
~/anaconda3/bin/python3
$ python3 -V
Python 3.6.3 :: Anaconda, Inc.

Anaconda 版 Python がインストールされています。

隔離された仮想環境を作成

conda create で仮想環境を作成します。

$ conda create -n conda-test
Solving environment: done

## Package Plan ##

  environment location: /home/ec2-user/anaconda3/envs/conda-test


Proceed ([y]/n)? yes

Preparing transaction: done
Verifying transaction: done
Executing transaction: done
#
# To activate this environment, use:
# > source activate conda-test
#
# To deactivate an active environment, use:
# > source deactivate
#

$ source activate conda-test

$ conda info -e
# conda environments:
#
base                     /home/ec2-user/anaconda3
conda-test            *  /home/ec2-user/anaconda3/envs/conda-test

仮想環境から抜けるときは $ source deactivate を実行するだけです。

モジュール管理

モジュールをインストールするには conda install コマンドを使います

$ conda install tensorflow
Solving environment: done

## Package Plan ##

  environment location: /home/ec2-user/anaconda3/envs/conda-test

  added / updated specs:
    - tensorflow
...

補足

Anaconda は conda コマンド経由で様々な操作を行います。

詳細はマニュアルをご確認下さい

https://conda.io/docs/user-guide/overview.html

Lambda 実行環境は Amazon Linux 1

AWS Lambda の実行環境は Amazon Linux 2ではなく、 Amazon Linux 1(amzn-ami-hvm-2017.03.1)です。

Cで書かれた拡張ライブラリをAL2でビルドすると、互換性のために、Lambdaの実行に失敗する可能性がございます。ご注意ください。

まとめ

venv は自分の理想とする環境を構築するイメージに対して、Anaconda は全盛り状態から必要なものをつまみ食いするイメージです。

プロジェクト・開発チームなど様々な要因により、理想とする開発環境は大きく変わります。

要件に応じて venvAnaconda をうまく使い分けていただければと思います。

参考