どこにでもいる30代SEの学習ブログ

主にプログラミング関連の学習内容。読んだ本の感想や株式投資についても書いてます。

【AWS】t4gでnumpy, pandas, matplotlibをインストールする方法

AWSのArmベースインスタンスt4g.micro、2021年3月31日まで無料トライアル中です。無料で使えるやったと思っていたら思わぬところで引っかかりました。

[0] 前提条件

OSはAmazon Linux2、python3とpip3はインストール済みです。

$ python3 -V
Python 3.7.9
$ pip3 -V
pip 9.0.3 from /usr/lib/python3.7/site-packages (python 3.7)

[1] numpyのインストールに失敗する

$ pip3 install numpy --user
...
ModuleNotFoundError: No module named 'Cython'
...

Cythonが無いと怒られます。対処法はcythonのインストールです。

$ pip3 install cython --user

[2] numpyのインストールに時間がかかる

理由は、ソースをビルドしているからです。

$ pip3 install numpy --user
Collecting numpy
  Using cached https://files.pythonhosted.org/packages/51/60/3f0fe5b7675a461d96b9d6729beecd3532565743278a9c3fe6dd09697fa7/numpy-1.19.5.zip
Installing collected packages: numpy
  Running setup.py install for numpy ... done
Successfully installed numpy-1.19.5

また、t4g.microのスペックはvCPU=2、メモリ=1(GiB)と決して高くないため、より時間がかかります。

[3] pandasがout of memoryでインストールできない

pandasもnumpyと同様に、ソースをビルドしてインストールしようとします。

pip3 install pandas --user
Collecting pandas
  Downloading https://files.pythonhosted.org/packages/11/1c/b0bc154996617eae877ff267fcf84e55e6c6808dbade0da206f0419dd483/pandas-1.2.1.tar.gz (5.5MB)
    100% |████████████████████████████████| 5.5MB 273kB/s 
...
  Running setup.py install for pandas ... error
...
    as: out of memory allocating 4064 bytes after a total of 163106816 bytes
...

t4g.microのメモリ=1(GiB)では、pandasをソースからビルドするのには足らなかったようです。

有効な対応策が見つからなかったため、t4g.smallでビルドしました。

[4] matplotlibのインストールに失敗する

matplotlibに必要な「kiwisolver」のインストールに失敗します。

$ pip3 install matplotlib --user
Collecting matplotlib
  Downloading https://files.pythonhosted.org/packages/7b/b3/7c48f648bf83f39d4385e0169d1b68218b838e185047f7f613b1cfc57947/matplotlib-3.3.3.tar.gz (37.9MB)
    100% |████████████████████████████████| 37.9MB 39kB/s 
Collecting cycler>=0.10 (from matplotlib)
  Downloading https://files.pythonhosted.org/packages/f7/d2/e07d3ebb2bd7af696440ce7e754c59dd546ffe1bbe732c8ab68b9c834e61/cycler-0.10.0-py2.py3-none-any.whl
Collecting kiwisolver>=1.0.1 (from matplotlib)
  Downloading https://files.pythonhosted.org/packages/90/55/399ab9f2e171047d28933ae4b686d9382d17e6c09a01bead4a6f6b5038f4/kiwisolver-1.3.1.tar.gz (53kB)
    100% |████████████████████████████████| 61kB 13.0MB/s 
...
    ValueError: bad marshal data (unknown type code)
    
    During handling of the above exception, another exception occurred:
...
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-7wgyhm4y/kiwisolver/

対応策は、pipを最新にすることです。

$ sudo pip3 install -U pip
WARNING: Running pip install with root privileges is generally not a good idea. Try `pip3 install --user` instead.
Collecting pip
  Downloading https://files.pythonhosted.org/packages/de/47/58b9f3e6f611dfd17fb8bd9ed3e6f93b7ee662fb85bdfee3565e8979ddf7/pip-21.0-py3-none-any.whl (1.5MB)
    100% |████████████████████████████████| 1.5MB 916kB/s 
Installing collected packages: pip
  Found existing installation: pip 9.0.3
    Uninstalling pip-9.0.3:
      Successfully uninstalled pip-9.0.3
Successfully installed pip-21.0
$ source ~/.bash_profile

終わりに

最終的には無事解決できましたが、意外なところでハマってしまいました。