pyenv上でpip3 install --upgrade tensorflow時にエラー(ModuleNotFoundError: No module named '_ctypes')

pyenv上で、`pip3 install --upgrade tensorflow`時にエラー(`ModuleNotFoundError: No module named '_ctypes'`)

```
$ pip3 install --upgrade tensorflow
Collecting tensorflow
  Using cached tensorflow-2.5.0-cp39-cp39-manylinux2010_x86_64.whl (454.4 MB)
Collecting tensorflow-estimator<2.6.0,>=2.5.0rc0
  Using cached tensorflow_estimator-2.5.0-py2.py3-none-any.whl (462 kB)
Collecting protobuf>=3.9.2
  Using cached protobuf-3.17.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl (1.0 MB)
Collecting flatbuffers~=1.12.0
  Downloading flatbuffers-1.12-py2.py3-none-any.whl (15 kB)
Collecting gast==0.4.0
  Using cached gast-0.4.0-py3-none-any.whl (9.8 kB)
Collecting wrapt~=1.12.1
  Using cached wrapt-1.12.1.tar.gz (27 kB)
    ERROR: Command errored out with exit status 1:
     command: /home/ubuntu/.pyenv/versions/3.9.1/envs/sue-robo_env/bin/python3.9 -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-1_kqqf4q/wrapt_e6e7652d6e884566bcac4d205c9669f4/setup.py'"'"'; __file__='"'"'/tmp/pip-install-1_kqqf4q/wrapt_e6e7652d6e884566bcac4d205c9669f4/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-utc7m761
         cwd: /tmp/pip-install-1_kqqf4q/wrapt_e6e7652d6e884566bcac4d205c9669f4/
    Complete output (11 lines):
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/home/ubuntu/.pyenv/versions/3.9.1/envs/sue-robo_env/lib/python3.9/site-packages/setuptools/__init__.py", line 23, in <module>
        from setuptools.dist import Distribution
      File "/home/ubuntu/.pyenv/versions/3.9.1/envs/sue-robo_env/lib/python3.9/site-packages/setuptools/dist.py", line 34, in <module>
        from setuptools import windows_support
      File "/home/ubuntu/.pyenv/versions/3.9.1/envs/sue-robo_env/lib/python3.9/site-packages/setuptools/windows_support.py", line 2, in <module>
        import ctypes
      File "/home/ubuntu/.pyenv/versions/3.9.1/lib/python3.9/ctypes/__init__.py", line 8, in <module>
        from _ctypes import Union, Structure, Array
    ModuleNotFoundError: No module named '_ctypes'
    ----------------------------------------
WARNING: Discarding https://files.pythonhosted.org/packages/82/f7/e43cefbe88c5fd371f4cf0cf5eb3feccd07515af9fd6cf7dbf1d1793a797/wrapt-1.12.1.tar.gz#sha256=b62ffa81fb85f4332a4f609cab4ac40709470da05643a082ec1eb88e6d9b97d7 (from https://pypi.org/simple/wrapt/). Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.
ERROR: Could not find a version that satisfies the requirement wrapt~=1.12.1 (from tensorflow) (from versions: 1.0.0, 1.1.0, 1.1.1, 1.1.2, 1.1.3, 1.1.4, 1.2.0, 1.2.1, 1.3.0, 1.3.1, 1.4.0, 1.4.1, 1.4.2, 1.5.0, 1.5.1, 1.6.0, 1.7.0, 1.8.0, 1.9.0, 1.10.0, 1.10.1, 1.10.2, 1.10.4, 1.10.5, 1.10.6, 1.10.7, 1.10.8, 1.10.9, 1.10.10, 1.10.11, 1.11.0, 1.11.1, 1.11.2, 1.12.0, 1.12.1)
ERROR: No matching distribution found for wrapt~=1.12.1
```

以下によりライブラリインストール、pyenvで該当するpythonバージョンを再インストールして解決

```
sudo apt-get install libffi-dev 
pyenv install 3.9.1
```

# 参考
https://github.com/pyenv/pyenv/wiki/common-build-problems
https://teratail.com/questions/174992
https://stackoverflow.com/questions/45577194/failed-to-activate-virtualenv-with-pyenv/45578839
https://teratail.com/questions/88209
https://stackoverflow.com/questions/56418874/cant-install-pyqt5-using-pip
https://qiita.com/Uejun/items/6d19c141707751e7f111