Pip: Make main method smaller (#38788)
This commit is contained in:
parent
5eb6e3c611
commit
42953c40ce
1 changed files with 48 additions and 43 deletions
|
@ -342,6 +342,53 @@ def _get_package_info(module, package, env=None):
|
|||
return formatted_dep
|
||||
|
||||
|
||||
def setup_virtualenv(module, env, chdir, out, err):
|
||||
if module.check_mode:
|
||||
module.exit_json(changed=True)
|
||||
|
||||
cmd = module.params['virtualenv_command']
|
||||
if os.path.basename(cmd) == cmd:
|
||||
cmd = module.get_bin_path(cmd, True)
|
||||
|
||||
if module.params['virtualenv_site_packages']:
|
||||
cmd += ' --system-site-packages'
|
||||
else:
|
||||
cmd_opts = _get_cmd_options(module, cmd)
|
||||
if '--no-site-packages' in cmd_opts:
|
||||
cmd += ' --no-site-packages'
|
||||
|
||||
virtualenv_python = module.params['virtualenv_python']
|
||||
# -p is a virtualenv option, not compatible with pyenv or venv
|
||||
# this if validates if the command being used is not any of them
|
||||
if not any(ex in module.params['virtualenv_command'] for ex in ('pyvenv', '-m venv')):
|
||||
if virtualenv_python:
|
||||
cmd += ' -p%s' % virtualenv_python
|
||||
elif PY3:
|
||||
# Ubuntu currently has a patch making virtualenv always
|
||||
# try to use python2. Since Ubuntu16 works without
|
||||
# python2 installed, this is a problem. This code mimics
|
||||
# the upstream behaviour of using the python which invoked
|
||||
# virtualenv to determine which python is used inside of
|
||||
# the virtualenv (when none are specified).
|
||||
cmd += ' -p%s' % sys.executable
|
||||
|
||||
# if venv or pyvenv are used and virtualenv_python is defined, then
|
||||
# virtualenv_python is ignored, this has to be acknowledged
|
||||
elif module.params['virtualenv_python']:
|
||||
module.fail_json(
|
||||
msg='virtualenv_python should not be used when'
|
||||
' using the venv module or pyvenv as virtualenv_command'
|
||||
)
|
||||
|
||||
cmd = "%s %s" % (cmd, env)
|
||||
rc, out_venv, err_venv = module.run_command(cmd, cwd=chdir)
|
||||
out += out_venv
|
||||
err += err_venv
|
||||
if rc != 0:
|
||||
_fail(module, cmd, out, err)
|
||||
return out, err
|
||||
|
||||
|
||||
def main():
|
||||
state_map = dict(
|
||||
present='install',
|
||||
|
@ -377,7 +424,6 @@ def main():
|
|||
version = module.params['version']
|
||||
requirements = module.params['requirements']
|
||||
extra_args = module.params['extra_args']
|
||||
virtualenv_python = module.params['virtualenv_python']
|
||||
chdir = module.params['chdir']
|
||||
umask = module.params['umask']
|
||||
env = module.params['virtualenv']
|
||||
|
@ -410,48 +456,7 @@ def main():
|
|||
if env:
|
||||
if not os.path.exists(os.path.join(env, 'bin', 'activate')):
|
||||
venv_created = True
|
||||
if module.check_mode:
|
||||
module.exit_json(changed=True)
|
||||
|
||||
cmd = module.params['virtualenv_command']
|
||||
if os.path.basename(cmd) == cmd:
|
||||
cmd = module.get_bin_path(cmd, True)
|
||||
|
||||
if module.params['virtualenv_site_packages']:
|
||||
cmd += ' --system-site-packages'
|
||||
else:
|
||||
cmd_opts = _get_cmd_options(module, cmd)
|
||||
if '--no-site-packages' in cmd_opts:
|
||||
cmd += ' --no-site-packages'
|
||||
|
||||
# -p is a virtualenv option, not compatible with pyenv or venv
|
||||
# this if validates if the command being used is not any of them
|
||||
if not any(ex in module.params['virtualenv_command'] for ex in ('pyvenv', '-m venv')):
|
||||
if virtualenv_python:
|
||||
cmd += ' -p%s' % virtualenv_python
|
||||
elif PY3:
|
||||
# Ubuntu currently has a patch making virtualenv always
|
||||
# try to use python2. Since Ubuntu16 works without
|
||||
# python2 installed, this is a problem. This code mimics
|
||||
# the upstream behaviour of using the python which invoked
|
||||
# virtualenv to determine which python is used inside of
|
||||
# the virtualenv (when none are specified).
|
||||
cmd += ' -p%s' % sys.executable
|
||||
|
||||
# if venv or pyvenv are used and virtualenv_python is defined, then
|
||||
# virtualenv_python is ignored, this has to be acknowledged
|
||||
elif module.params['virtualenv_python']:
|
||||
module.fail_json(
|
||||
msg='virtualenv_python should not be used when'
|
||||
' using the venv module or pyvenv as virtualenv_command'
|
||||
)
|
||||
|
||||
cmd = "%s %s" % (cmd, env)
|
||||
rc, out_venv, err_venv = module.run_command(cmd, cwd=chdir)
|
||||
out += out_venv
|
||||
err += err_venv
|
||||
if rc != 0:
|
||||
_fail(module, cmd, out, err)
|
||||
out, err = setup_virtualenv(module, env, chdir, out, err)
|
||||
|
||||
pip = _get_pip(module, env, module.params['executable'])
|
||||
|
||||
|
|
Loading…
Reference in a new issue