背景

ansibleのplaybookを作ったのですが、これがちゃんと動くかというテストを効率的に実施しようと目論んでいます。

手始めにansible-lintをインストールして、ansibleのプレイブックの構文チェックをしようと考えました。

ansible-lintをインストールしようとしたら・・・

ansible-lintをインストールしようとしました。そしたら、「pipのアップグレードを検討するように」とメッセージが出力されました。(You should considerって、検討すべきという意味で捉えた)

$ pip install ansible-lint
Collecting ansible-lint
Downloading https://files.pythonhosted.org/packages/1b/f5/d99686df5aa3fd9cb1f17b2b39eced4c08769c92ae2429a845cc1243f9e6/ansible-lint-6.0.2.tar.gz (209kB)
    100% |████████████████████████████████| 215kB 1.4MB/s 
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):
    File "<string>", line 1, in <module>
    IOError: [Errno 2] No such file or directory: '/tmp/pip-build-Giroap/ansible-lint/setup.py'
    
    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-Giroap/ansible-lint/
You are using pip version 8.1.2, however version 22.0.4 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.

環境を確認

改めて自分の環境を確認すると、以下でした。

pythonのバージョン

# python -V
Python 2.7.5

pipのバージョン


    # pip -V
    pip 8.1.2 from /usr/lib/python2.7/site-packages (python 2.7)

CentOSのバージョン

    # cat /etc/redhat-release 
    CentOS Linux release 7.4.1708 (Core)

アップデート

上記のエラーメッセージで出力されている「pip install –upgrade pip」のコマンドでアップグレードを試みました。そしたら、エラーで以下のメッセージです。

    # pip install --upgrade pip
    Cache entry deserialization failed, entry ignored
    Collecting pip
    Using cached https://files.pythonhosted.org/packages/33/c9/e2164122d365d8f823213a53970fa3005eb16218edcfc56ca24cb6deba2b/pip-22.0.4.tar.gz
        Complete output from command python setup.py egg_info:
        Traceback (most recent call last):
        File "<string>", line 1, in <module>
        File "/tmp/pip-build-m0WAMp/pip/setup.py", line 7
            def read(rel_path: str) -> str:
                            ^
        SyntaxError: invalid syntax
        
        ----------------------------------------
    Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-m0WAMp/pip/
    You are using pip version 8.1.2, however version 22.0.4 is available.
    You should consider upgrading via the 'pip install --upgrade pip' command.

そうなんです。pip install --upgrade pipでアップグレードしようとしたら、pip install --upgrade pipコマンドを使用してアップグレードを検討しなさいと出るのです。

循環論法??

python3.8をインストール

このままではansible-lintをインストールできないので、pythonを3.8にアップデートを試みました。

参考にしたのは、以下のページです。ほんと、こういう記録を残してくれることに感謝です。

CentOS 7にPython 3.8をインストール(SCL) - Qiita

レポジトリ登録

    yum install -y centos-release-scl

インストールとpythonの有効化

ポイントは、scl enable rh-python38 bashの部分です。このコマンドでpython3.8が有効になります。なお、再起動すると戻るので、使用時は都度scl enable rh-python38 bashを投入する必要があります。

    yum install -y rh-python38 which
    scl enable rh-python38 bash

確認

python3.8がインストールされています。

    # python -V
    Python 3.8.11

    # pip -V
    pip 19.3.1 from /opt/rh/rh-python38/root/usr/lib/python3.8/site-packages/pip (python 3.8)

留意事項

再起動するとsclの定義が無効になるので、使用時は都度scl enable rh-python38 bashを投入する必要があります。