New module argument to specify the executable used for running 'pip'. This allows support for system installation of packages on systems with multiple installations of Python.

pull/3930/merge
Pedro Romano 11 years ago committed by Michael DeHaan
parent 3c33273071
commit 57a71043a3

@ -97,6 +97,15 @@ options:
version_added: "1.3" version_added: "1.3"
required: false required: false
default: null default: null
executable:
description:
- The explicit executable or a pathname to the executable to be used to
run pip for a specific version of Python installed in the system. For
example C(pip-3.3), if there are both Python 2.7 and 3.3 installations
in the system and you want to run pip for the Python 3.3 installation.
version_added: "1.3"
required: false
default: null
notes: notes:
- Please note that virtualenv (U(http://www.virtualenv.org/)) must be installed on the remote host if the virtualenv parameter is specified. - Please note that virtualenv (U(http://www.virtualenv.org/)) must be installed on the remote host if the virtualenv parameter is specified.
requirements: [ "virtualenv", "pip" ] requirements: [ "virtualenv", "pip" ]
@ -130,6 +139,9 @@ EXAMPLES = '''
# Install specified python requirements and custom Index URL. # Install specified python requirements and custom Index URL.
- pip: requirements=/my_app/requirements.txt extra_args='-i https://example.com/pypi/simple' - pip: requirements=/my_app/requirements.txt extra_args='-i https://example.com/pypi/simple'
# Install (Bottle) for Python 3.3 specifically,using the 'pip-3.3' executable.
- pip: name=bottle executable=pip-3.3
''' '''
@ -141,7 +153,9 @@ def _get_full_name(name, version=None):
return resp return resp
def _get_pip(module, env): def _get_pip(module, env, executable=None):
if executable is None:
# Default pip executables.
# On Debian and Ubuntu, pip is pip. # On Debian and Ubuntu, pip is pip.
# On Fedora18 and up, pip is python-pip. # On Fedora18 and up, pip is python-pip.
# On Fedora17 and below, CentOS and RedHat 6 and 5, pip is pip-python. # On Fedora17 and below, CentOS and RedHat 6 and 5, pip is pip-python.
@ -156,6 +170,9 @@ def _get_pip(module, env):
# will trigger fail_json. # will trigger fail_json.
if not pip: if not pip:
pip = module.get_bin_path('pip', True, ['%s/bin' % env]) pip = module.get_bin_path('pip', True, ['%s/bin' % env])
else:
# Explicit pip executable.
pip = module.get_bin_path(executable, True)
return pip return pip
@ -187,6 +204,7 @@ def main():
use_mirrors=dict(default='yes', type='bool'), use_mirrors=dict(default='yes', type='bool'),
extra_args=dict(default=None, required=False), extra_args=dict(default=None, required=False),
chdir=dict(default=None, required=False), chdir=dict(default=None, required=False),
executable=dict(default=None, required=False),
), ),
required_one_of=[['name', 'requirements']], required_one_of=[['name', 'requirements']],
mutually_exclusive=[['name', 'requirements']], mutually_exclusive=[['name', 'requirements']],
@ -231,7 +249,7 @@ def main():
if rc != 0: if rc != 0:
_fail(module, cmd, out, err) _fail(module, cmd, out, err)
pip = _get_pip(module, env) pip = _get_pip(module, env, module.params['executable'])
cmd = '%s %s' % (pip, state_map[state]) cmd = '%s %s' % (pip, state_map[state])

Loading…
Cancel
Save