CodeCatalyst開発環境にcfn-lintを入れようとして躓いたけど何とかなった話

2024/06/24に公開

Python環境わからん。

TL;DR

python3 がポイント。

python3 -m pip install cfn-lint

あったこと

CodeCatalyst開発環境、便利ですよね。

CloudFormation開発するときにはCloudFormation Linter(cfn-lint)があるともっと便利になるためインストールしましょう!

$ which python
alias python='python3.9'
        /usr/local/bin/python3.9
$ which python3
/usr/bin/python3
$ python -V
Python 3.9.19
$ python3 -V
Python 3.9.16

▲まずはPython環境を確認。2種類存在していて、python(または python3.9)と python3 では違うPythonバージョンを指すらしい

$ which pip
alias pip='pip3.9'
        ~/.local/bin/pip3.9
$ which pip3
~/.local/bin/pip3
$ pip -V
pip 24.1 from /home/mde-user/.local/lib/python3.9/site-packages/pip (python 3.9)
$ pip3 -V
pip 24.1 from /home/mde-user/.local/lib/python3.9/site-packages/pip (python 3.9)
$ python -m pip -V
pip 24.1 from /home/mde-user/.local/lib/python3.9/site-packages/pip (python 3.9)
$ python3 -m pip -V
pip 24.1 from /home/mde-user/.local/lib/python3.9/site-packages/pip (python 3.9)

pippip3 は同じ……ってこと?

$ pip install cfn-lint
...
Successfully installed cfn-lint-1.3.3
$ which cfn-lint
~/.local/bin/cfn-lint
$ cfn-lint -v
...
ModuleNotFoundError: No module named '_bz2'
$ pip uninstall cfn-lint
...
  Successfully uninstalled cfn-lint-1.3.3
$ pip3 install cfn-lint
...
Successfully installed cfn-lint-1.3.3
$ which cfn-lint
~/.local/bin/cfn-lint
$ cfn-lint -v
...
ModuleNotFoundError: No module named '_bz2'
$ pip3 uninstall cfn-lint
...
  Successfully uninstalled cfn-lint-1.3.3
$ python -m pip install cfn-lint
...
Successfully installed cfn-lint-1.3.3
$ which cfn-lint
~/.local/bin/cfn-lint
$ cfn-lint -v
...
ModuleNotFoundError: No module named '_bz2'
$ python -m pip uninstall cfn-lint
...
  Successfully uninstalled cfn-lint-1.3.3

pip install cfn-lintpip3 install cfn-lintpython -m pip install cfn-lint でインストールした場合は ModuleNotFoundError: No module named '_bz2' エラーでcfn-lintが使えない

$ python3 -m pip install cfn-lint
...
Successfully installed cfn-lint-1.3.3
$ which cfn-lint
~/.local/bin/cfn-lint
$ cfn-lint -v
cfn-lint 1.3.3

python3 -m pip install cfn-lint でインストールした場合はcfn-lintが使える!

$ python -c "import _bz2"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ModuleNotFoundError: No module named '_bz2'
$ python3 -c "import _bz2"
$ 

python(3.9.19)には _bz2 が入っていないが、python3(3.9.16)には入っている(?)という違いが影響しているっぽい

なお、開発環境のOSバージョンはAmazon Linux 2023.4.20240611でした。pipは自分でアップグレードしたため、24.1(最新)になっています。

あとがき

解決はできたものの、Python環境のことはよく分かりませんでした。

CodeCatalystにおいて、あるいは、2種類のPython3が存在する環境において、どちらを使用するべきかといった知見のある方がいれば教えていただけると嬉しいです。

Discussion