💡
No module named 'urllib3.packages.six' エラー対応
Pythonの実行時にNo module named 'urllib3.packages.six'
のエラーが出たため、原因確認と対応を行った。
環境
- OS:Red Hat Enterprise Linux 8.3
- サーバーGUIで標準インストール
-
dnf update
で最新の状態までアップデート済み
- 導入したパッケージ:
- Ansible Tower v.3.8.1
- VMware vSphere Automation SDK for Python
原因
VMware vSphere Automation SDK for Pythonを手順に従ってインストールした後に発生。
手順通りにインストール
# pip install --upgrade pip setuptools
# pip install --upgrade git+https://github.com/vmware/vsphere-automation-sdk-python.git
上記の手順ではシステムワイドにインストールを行うことになります。これにより、Ansible Towerのインストールにより構築されていたPythonの環境が壊れたのが原因です。
対処方法(クイック内容版)
pip
でsix
をアンインストールし、dnf reinstall
でpython3-six
を再インストール
# python3 -m pip uninstall six
# dnf reinstall python3-six
エラー内容と対処(詳細版)
エラー発生時の関連パッケージバージョン
rpmリスト
# rpm -qa|grep -e python3-six -e python3-urllib3
python3-six-1.11.0-8.el8.noarch
python3-urllib3-1.24.2-4.el8.noarch
pipリスト
# python3 -m pip list -v |grep -e six -e urllib3
six 1.15.0 /usr/local/lib/python3.6/site-packages pip
urllib3 1.24.2 /usr/lib/python3.6/site-packages
エラー再現テスト
urllib3をimportするとエラーが発生
# python3
Python 3.6.8 (default, Aug 18 2020, 08:33:21)
[GCC 8.3.1 20191121 (Red Hat 8.3.1-5)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import urllib3
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.6/site-packages/urllib3/__init__.py", line 8, in <module>
from .connectionpool import (
File "/usr/lib/python3.6/site-packages/urllib3/connectionpool.py", line 11, in <module>
from .exceptions import (
File "/usr/lib/python3.6/site-packages/urllib3/exceptions.py", line 2, in <module>
from .packages.six.moves.http_client import (
ModuleNotFoundError: No module named 'urllib3.packages.six'
>>>
(参考)Ansible Playbook実行時のエラー
Playbook実行時のエラーログ
"exception": "Traceback (most recent call last):\n File \"/tmp/ansible_vmware_datacenter_payload_uzcsiq6l/ansible_vmware_datacenter_payload.zip/ansible/module_utils/vmware.py\", line 24, in <module>\n import requests\n File \"/usr/local/lib/python3.6/site-packages/requests/__init__.py\", line 43, in <module>\n import urllib3\n File \"/usr/lib/python3.6/site-packages/urllib3/__init__.py\", line 8, in <module>\n from .connectionpool import (\n File \"/usr/lib/python3.6/site-packages/urllib3/connectionpool.py\", line 11, in <module>\n from .exceptions import (\n File \"/usr/lib/python3.6/site-packages/urllib3/exceptions.py\", line 2, in <module>\n from .packages.six.moves.http_client import (\nModuleNotFoundError: No module named 'urllib3.packages.six'\n",
対処
pipでsixをアンインストールし、dnfでpython3-sixを再インストールする。
pipでsixのアンインストール
# python3 -m pip uninstall six
Found existing installation: six 1.15.0
Uninstalling six-1.15.0:
Would remove:
/usr/local/lib/python3.6/site-packages/six-1.15.0.dist-info/*
/usr/local/lib/python3.6/site-packages/six.py
Proceed (y/n)? y
Successfully uninstalled six-1.15.0
# python3 -m pip list -v |grep -e six -e urllib3
urllib3 1.24.2 /usr/lib/python3.6/site-packages
python3-six
の再インストールの前に確認。six
が動作していないため、dnf info
コマンドでエラー表示。コマンド結果はちゃんと表示される。
dnf infoでpython3-sixの確認
# dnf info python3-six
plugin "changelog" のロードに失敗しました: No module named 'six'
plugin "product-id" のロードに失敗しました: No module named 'six'
plugin "subscription-manager" のロードに失敗しました: No module named 'six'
plugin "upload-profile" のロードに失敗しました: No module named 'six'
メタデータの期限切れの最終確認: 0:16:38 時間前の 2021年03月17日 15時22分34秒 に実施しました。
インストール済みパッケージ
名前 : python3-six
バージョン : 1.11.0
リリース : 8.el8
Arch : noarch
サイズ : 98 k
ソース : python-six-1.11.0-8.el8.src.rpm
リポジトリー : @System
repo から : anaconda
概要 : Python 2 and 3 compatibility utilities
URL : https://pypi.python.org/pypi/six
ライセンス : MIT
説明 : python-six provides simple utilities for wrapping over differences between
: Python 2 and Python 3.
: Python 3 version.
dnf reinstall
でpython3-six
を再インストール
python3-sixの再インストール
# dnf reinstall python3-six
plugin "changelog" のロードに失敗しました: No module named 'six'
plugin "product-id" のロードに失敗しました: No module named 'six'
plugin "subscription-manager" のロードに失敗しました: No module named 'six'
plugin "upload-profile" のロードに失敗しました: No module named 'six'
メタデータの期限切れの最終確認: 0:18:36 時間前の 2021年03月17日 15時22分34秒 に実施しました。
依存関係が解決しました。
============================================================================================================================================================================================================
パッケージ アーキテクチャー バージョン リポジトリー サイズ
============================================================================================================================================================================================================
再インストール:
python3-six noarch 1.11.0-8.el8 rhel-8-for-x86_64-baseos-rpms 38 k
トランザクションの概要
============================================================================================================================================================================================================
ダウンロードサイズの合計: 38 k
インストール済みのサイズ: 98 k
これでよろしいですか? [y/N]: y
パッケージのダウンロード:
python3-six-1.11.0-8.el8.noarch.rpm 80 kB/s | 38 kB 00:00
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
合計 80 kB/s | 38 kB 00:00
トランザクションの確認を実行中
トランザクションの確認に成功しました。
トランザクションのテストを実行中
トランザクションのテストに成功しました。
トランザクションを実行中
準備 : 1/1
再インストール : python3-six-1.11.0-8.el8.noarch 1/2
整理 : python3-six-1.11.0-8.el8.noarch 2/2
scriptletの実行中: python3-six-1.11.0-8.el8.noarch 2/2
検証 : python3-six-1.11.0-8.el8.noarch 1/2
検証 : python3-six-1.11.0-8.el8.noarch 2/2
再インストール済み:
python3-six-1.11.0-8.el8.noarch
完了しました!
再インストール後はdnf
コマンドもエラーなく実行可能
dnf infoでpython3-sixの確認
# dnf info python3-six
Updating Subscription Management repositories.
メタデータの期限切れの最終確認: 0:19:51 時間前の 2021年03月17日 15時22分34秒 に実施しました。
インストール済みパッケージ
名前 : python3-six
バージョン : 1.11.0
リリース : 8.el8
Arch : noarch
サイズ : 98 k
ソース : python-six-1.11.0-8.el8.src.rpm
リポジトリー : @System
repo から : rhel-8-for-x86_64-baseos-rpms
概要 : Python 2 and 3 compatibility utilities
URL : https://pypi.python.org/pypi/six
ライセンス : MIT
説明 : python-six provides simple utilities for wrapping over differences between
: Python 2 and Python 3.
: Python 3 version.
対処後パッケージバージョン
pip
の方のsix
のバージョンが1.11.0に変更されていることが確認できる
rpmとpipでパッケージの確認
# rpm -qa|grep -e python3-six -e python3-urllib3
python3-six-1.11.0-8.el8.noarch
python3-urllib3-1.24.2-4.el8.noarch
# python3 -m pip list -v |grep -e six -e urllib3
six 1.11.0 /usr/lib/python3.6/site-packages pip
urllib3 1.24.2 /usr/lib/python3.6/site-packages
参考リンク
Discussion
Tower から使われるときには、/var/lib/awx/venv/ansible の venv が使われます。
ansible-tower-venv-ansible-3.8.2-1.el8at.x86_64 の rpm でさまざまな python ライブラリがまとめて入れられるようになっていまして、six も入っています。
VMware 関連の collections も Tower をインストールすると一緒に入ります。VMware vSphere Automation SDK for Python も内包されています。
/var/lib/awx/vendor/awx_ansible_collections/ansible_collections/community/vmware