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.

This commit is contained in:
Pedro Romano 2013-08-16 12:02:23 +01:00 committed by Michael DeHaan
parent 3c33273071
commit 57a71043a3

View file

@ -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])