diff --git a/rattail_fabric/python.py b/rattail_fabric/python.py index 20e6cb4..71fafbe 100644 --- a/rattail_fabric/python.py +++ b/rattail_fabric/python.py @@ -30,7 +30,7 @@ from contextlib import contextmanager import six -from fabric.api import sudo, run, prefix, cd, settings, env +from fabric.api import abort, sudo, run, prefix, cd, settings, env from fabric.contrib.files import exists, append from rattail_fabric import apt, mkdir @@ -54,12 +54,17 @@ def install_pip(use_apt=False): pip('pip', 'wheel', 'ndg-httpsclient') -def pip(*packages): +def pip(*packages, **kwargs): """ Install one or more packages via ``pip install``. """ - packages = ["'{0}'".format(p) for p in packages] - sudo('pip install --upgrade {0}'.format(' '.join(packages))) + upgrade_strategy = kwargs.pop('upgrade_strategy', '') + if upgrade_strategy: + upgrade_strategy = '--upgrade-strategy {}'.format(upgrade_strategy) + if kwargs: + abort("Unknown kwargs for pip(): {}".format(kwargs)) + packages = ["'{}'".format(p) for p in packages] + sudo('pip install --upgrade {} {}'.format(upgrade_strategy, ' '.join(packages))) def install_virtualenvwrapper(workon_home=None, user='root', use_apt=False): @@ -99,7 +104,8 @@ def configure_virtualenvwrapper(user, workon_home=None, wrapper='/usr/local/bin/ update('.bashrc') -def mkvirtualenv(name, python=None, user=None, workon_home=None, upgrade_pip=True): +def mkvirtualenv(name, python=None, user=None, workon_home=None, + upgrade_pip=True, upgrade_setuptools=True, upgrade_strategy=None): """ Make a new Python virtual environment. """ @@ -112,7 +118,9 @@ def mkvirtualenv(name, python=None, user=None, workon_home=None, upgrade_pip=Tru pip_req = 'pip' with workon(name): pip('six') - pip(pip_req, 'setuptools', 'wheel', 'ndg-httpsclient') + pip(pip_req) + if upgrade_setuptools: + pip('setuptools', 'wheel', 'ndg-httpsclient', upgrade_strategy=upgrade_strategy) if user: with cdvirtualenv(name, workon_home=workon_home): mkdir('app/log', owner='{0}:{0}'.format(user))