Module: Language::Python::Shebang Private

Includes:
Kernel
Defined in:
language/python.rb,
language/python.rbi

Overview

This module is part of a private API. This module may only be used in the Homebrew/brew repository. Third parties should avoid using this module if possible, as it may be removed or changed without warning.

Mixin module for Formula adding shebang rewrite features.

Constant Summary collapse

PYTHON_SHEBANG_REGEX =

This constant is part of a private API. This constant may only be used in the Homebrew/brew repository. Third parties should avoid using this constant if possible, as it may be removed or changed without warning.

A regex to match potential shebang permutations.

%r{^#! ?/usr/bin/(?:env )?python(?:[23](?:\.\d{1,2})?)?( |$)}
PYTHON_SHEBANG_MAX_LENGTH =

This constant is part of a private API. This constant may only be used in the Homebrew/brew repository. Third parties should avoid using this constant if possible, as it may be removed or changed without warning.

The length of the longest shebang matching SHEBANG_REGEX.

T.let("#! /usr/bin/env pythonx.yyy ".length, Integer)

Class Method Summary collapse

Methods included from Kernel

#disk_usage_readable, #ensure_executable!, #ensure_formula_installed!, #exec_browser, #exec_editor, #ignore_interrupts, #interactive_shell, #number_readable, #odebug, #odeprecated, #odie, #odisabled, #ofail, #oh1, #oh1_title, #ohai, #ohai_title, #onoe, #opoo, #paths, #pretty_duration, #pretty_installed, #pretty_outdated, #pretty_uninstalled, #quiet_system, #redact_secrets, #redirect_stdout, #require?, #safe_system, #tap_and_name_comparison, #truncate_text_to_approximate_size, #which, #which_all, #which_editor, #with_custom_locale, #with_env, #with_homebrew_path

Class Method Details

.detected_python_shebang(formula = T.cast(self, Formula), use_python_from_path: false) ⇒ Utils::Shebang::RewriteInfo

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Parameters:

  • formula (Formula) (defaults to: T.cast(self, Formula))
  • use_python_from_path (Boolean) (defaults to: false)

Returns:



127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
# File 'language/python.rb', line 127

def detected_python_shebang(formula = T.cast(self, Formula), use_python_from_path: false)
  python_path = if use_python_from_path
    "/usr/bin/env python3"
  else
    python_deps = formula.deps.map(&:name).grep(/^python(@.+)?$/)
    raise ShebangDetectionError.new("Python", "formula does not depend on Python") if python_deps.empty?
    if python_deps.length > 1
      raise ShebangDetectionError.new("Python", "formula has multiple Python dependencies")
    end

    python_dep = python_deps.first
    Formula[python_dep].opt_bin/python_dep.sub("@", "")
  end

  python_shebang_rewrite_info(python_path)
end