背景
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
を投入する必要があります。