From 73141d503517aac97f3570d60bea6ffdf955e519 Mon Sep 17 00:00:00 2001 From: Jordan Borean Date: Thu, 1 Nov 2018 00:30:37 +1000 Subject: [PATCH] pip: produce better error msg on import error (#47743) * pip: produce better error msg on import error * Added porting guide entry for 2.7 --- docs/docsite/rst/porting_guides/porting_guide_2.7.rst | 4 ++++ lib/ansible/modules/packaging/language/pip.py | 8 ++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/docs/docsite/rst/porting_guides/porting_guide_2.7.rst b/docs/docsite/rst/porting_guides/porting_guide_2.7.rst index a4a6e36c20..abd7a1b8ef 100644 --- a/docs/docsite/rst/porting_guides/porting_guide_2.7.rst +++ b/docs/docsite/rst/porting_guides/porting_guide_2.7.rst @@ -221,6 +221,10 @@ Noteworthy module changes #> ansible -m include_role -a 'name=myrole' all +* The ``pip`` module has added a dependency on ``setuptools`` to support version requirements, this requirement is for + the Python interpreter that executes the module and not the Python interpreter that the module is managing. + + Plugins ======= diff --git a/lib/ansible/modules/packaging/language/pip.py b/lib/ansible/modules/packaging/language/pip.py index 1bae77e95c..8683a40754 100644 --- a/lib/ansible/modules/packaging/language/pip.py +++ b/lib/ansible/modules/packaging/language/pip.py @@ -241,16 +241,19 @@ import sys import tempfile import operator import shlex +import traceback from distutils.version import LooseVersion +SETUPTOOLS_IMP_ERR = None try: from pkg_resources import Requirement HAS_SETUPTOOLS = True except ImportError: HAS_SETUPTOOLS = False + SETUPTOOLS_IMP_ERR = traceback.format_exc() -from ansible.module_utils.basic import AnsibleModule, is_executable +from ansible.module_utils.basic import AnsibleModule, is_executable, missing_required_lib from ansible.module_utils._text import to_native from ansible.module_utils.six import PY3 @@ -573,7 +576,8 @@ def main(): ) if not HAS_SETUPTOOLS: - module.fail_json(msg="No setuptools found in remote host, please install it first.") + module.fail_json(msg=missing_required_lib("setuptools"), + exception=SETUPTOOLS_IMP_ERR) state = module.params['state'] name = module.params['name']