Ejemplo n.º 1
0
def find_compatible_interpreters(pex_python_path=None, compatibility_constraints=None):
  """Find all compatible interpreters on the system within the supplied constraints and use
     PEX_PYTHON_PATH if it is set. If not, fall back to interpreters on $PATH.
  """
  if pex_python_path:
    interpreters = []
    for binary in pex_python_path.split(os.pathsep):
      try:
        interpreters.append(PythonInterpreter.from_binary(binary))
      except Executor.ExecutionError:
        print("Python interpreter %s in PEX_PYTHON_PATH failed to load properly." % binary,
          file=sys.stderr)
    if not interpreters:
      die('PEX_PYTHON_PATH was defined, but no valid interpreters could be identified. Exiting.')
  else:
    # We may have been invoked with a specific interpreter not on the $PATH, make sure our
    # sys.executable is included as a candidate in this case.
    interpreters = OrderedSet([PythonInterpreter.get()])

    # Add all qualifying interpreters found in $PATH.
    interpreters.update(PythonInterpreter.all())

  return list(
    matched_interpreters(interpreters, compatibility_constraints)
    if compatibility_constraints
    else interpreters
  )
Ejemplo n.º 2
0
def find_compatible_interpreters(pex_python_path, compatibility_constraints):
    """Find all compatible interpreters on the system within the supplied constraints and use
     PEX_PYTHON_PATH if it is set. If not, fall back to interpreters on $PATH.
  """
    if pex_python_path:
        interpreters = []
        for binary in pex_python_path.split(os.pathsep):
            try:
                interpreters.append(PythonInterpreter.from_binary(binary))
            except Executor.ExecutionError:
                print(
                    "Python interpreter %s in PEX_PYTHON_PATH failed to load properly."
                    % binary,
                    file=sys.stderr)
        if not interpreters:
            die('PEX_PYTHON_PATH was defined, but no valid interpreters could be identified. Exiting.'
                )
    else:
        if not os.getenv('PATH', ''):
            # no $PATH, use sys.executable
            interpreters = [PythonInterpreter.get()]
        else:
            # get all qualifying interpreters found in $PATH
            interpreters = PythonInterpreter.all()

    return list(
        matched_interpreters(interpreters, compatibility_constraints
                             ) if compatibility_constraints else interpreters)
Ejemplo n.º 3
0
def _select_pex_python_interpreter(target_python, compatibility_constraints=None):
  target = find_in_path(target_python)

  if not target:
    die('Failed to find interpreter specified by PEX_PYTHON: %s' % target)
  if compatibility_constraints:
    pi = PythonInterpreter.from_binary(target)
    if not list(matched_interpreters([pi], compatibility_constraints)):
      die('Interpreter specified by PEX_PYTHON (%s) is not compatible with specified '
          'interpreter constraints: %s' % (target, str(compatibility_constraints)))
  if not os.path.exists(target):
    die('Target interpreter specified by PEX_PYTHON %s does not exist. Exiting.' % target)
  return target
Ejemplo n.º 4
0
def _filter_compatible_interpreters(interpreters,
                                    compatibility_constraints=None):
    return list(
        matched_interpreters(interpreters, compatibility_constraints
                             ) if compatibility_constraints else interpreters)