Expand list of Python executable names to search in PATH

Fixes #7784
This commit is contained in:
Corey Farwell 2015-09-29 18:03:22 -04:00
parent 8547d132f9
commit 1a9263c2b4

View file

@ -71,27 +71,35 @@ CATEGORIES = {
} }
def _get_exec(name, default=None): def _get_exec(*names):
for name in names:
path = find_executable(name) path = find_executable(name)
if not path: if path is not None:
return default
return path return path
return None
# Possible names of executables, sorted from most to least specific
PYTHON_NAMES = ["python-2.7", "python2.7", "python2", "python"]
VIRTUALENV_NAMES = ["virtualenv-2.7", "virtualenv2.7", "virtualenv2", "virtualenv"]
PIP_NAMES = ["pip-2.7", "pip2.7", "pip2", "pip"]
def _activate_virtualenv(topdir): def _activate_virtualenv(topdir):
virtualenv_path = os.path.join(topdir, "python", "_virtualenv") virtualenv_path = os.path.join(topdir, "python", "_virtualenv")
python = _get_exec("python2", "python") python = _get_exec(*PYTHON_NAMES)
if python is None:
sys.exit("Python is not installed. Please install it prior to running mach.")
if not os.path.exists(virtualenv_path): if not os.path.exists(virtualenv_path):
virtualenv = _get_exec("virtualenv2", "virtualenv") virtualenv = _get_exec(*VIRTUALENV_NAMES)
if virtualenv is None:
sys.exit("Python virtualenv is not installed. Please install it prior to running mach.")
try: try:
subprocess.check_call([virtualenv, "-p", python, virtualenv_path]) subprocess.check_call([virtualenv, "-p", python, virtualenv_path])
except subprocess.CalledProcessError: except (subprocess.CalledProcessError, OSError):
sys.exit("Python virtualenv failed to execute properly.") sys.exit("Python virtualenv failed to execute properly.")
except OSError:
sys.exit("Please install virtualenv "
"and ensure permissions prior to running mach.")
activate_path = os.path.join(virtualenv_path, "bin", "activate_this.py") activate_path = os.path.join(virtualenv_path, "bin", "activate_this.py")
execfile(activate_path, dict(__file__=activate_path)) execfile(activate_path, dict(__file__=activate_path))
@ -117,13 +125,14 @@ def _activate_virtualenv(topdir):
except OSError: except OSError:
open(marker_path, 'w').close() open(marker_path, 'w').close()
pip = _get_exec(*PIP_NAMES)
if pip is None:
sys.exit("Python pip is not installed. Please install it prior to running mach.")
try: try:
subprocess.check_call(["pip", "install", "-q", "-r", req_path]) subprocess.check_call([pip, "install", "-q", "-r", req_path])
except subprocess.CalledProcessError: except (subprocess.CalledProcessError, OSError):
sys.exit("Pip failed to execute properly.") sys.exit("Pip failed to execute properly.")
except OSError:
sys.exit("Pip not found. Please install pip and verify permissions"
" prior to running mach.")
os.utime(marker_path, None) os.utime(marker_path, None)