Module: Language::Python
- Defined in:
- language/python.rb
Overview
Helper functions for Python formulae.
Defined Under Namespace
Modules: Shebang, Virtualenv
Class Method Summary collapse
- .each_python(build, &block) ⇒ void private
- .homebrew_site_packages(python = "python3.7") ⇒ Pathname private
- .in_sys_path?(python, path) ⇒ Boolean private
- .major_minor_version(python) ⇒ Version? private
- .reads_brewed_pth_files?(python) ⇒ Boolean private
- .setup_install_args(prefix, python = "python3") ⇒ Array<String> private
- .site_packages(python = "python3.7") ⇒ String private
- .user_site_packages(python) ⇒ Pathname private
Class Method Details
.each_python(build, &block) ⇒ void
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.
This method returns an undefined value.
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'language/python.rb', line 37 def self.each_python(build, &block) original_pythonpath = ENV.fetch("PYTHONPATH", nil) pythons = { "python@3" => "python3", "pypy" => "pypy", "pypy3" => "pypy3" } pythons.each do |python_formula, python| python_formula = Formulary.factory(python_formula) next if build.without? python_formula.to_s version = major_minor_version python ENV["PYTHONPATH"] = if python_formula.latest_version_installed? nil else homebrew_site_packages(python).to_s end block&.call python, version end ENV["PYTHONPATH"] = original_pythonpath end |
.homebrew_site_packages(python = "python3.7") ⇒ Pathname
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.
18 19 20 |
# File 'language/python.rb', line 18 def self.homebrew_site_packages(python = "python3.7") HOMEBREW_PREFIX/site_packages(python) end |
.in_sys_path?(python, path) ⇒ Boolean
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.
77 78 79 80 81 82 83 |
# File 'language/python.rb', line 77 def self.in_sys_path?(python, path) script = <<~PYTHON import os, sys [os.path.realpath(p) for p in sys.path].index(os.path.realpath("#{path}")) PYTHON quiet_system python, "-c", script end |
.major_minor_version(python) ⇒ Version?
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.
10 11 12 13 14 15 |
# File 'language/python.rb', line 10 def self.major_minor_version(python) version = `#{python} --version 2>&1`.chomp[/(\d\.\d+)/, 1] return unless version Version.new(version) end |
.reads_brewed_pth_files?(python) ⇒ Boolean
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.
58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'language/python.rb', line 58 def self.reads_brewed_pth_files?(python) return false unless homebrew_site_packages(python).directory? return false unless homebrew_site_packages(python).writable? probe_file = homebrew_site_packages(python)/"homebrew-pth-probe.pth" begin probe_file.atomic_write("import site; site.homebrew_was_here = True") with_homebrew_path { quiet_system python, "-c", "import site; assert(site.homebrew_was_here)" } ensure probe_file.unlink if probe_file.exist? end end |
.setup_install_args(prefix, python = "python3") ⇒ Array<String>
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.
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
# File 'language/python.rb', line 86 def self.setup_install_args(prefix, python = "python3") shim = <<~PYTHON import setuptools, tokenize __file__ = 'setup.py' exec(compile(getattr(tokenize, 'open', open)(__file__).read() .replace('\\r\\n', '\\n'), __file__, 'exec')) PYTHON %W[ -c #{shim} --no-user-cfg install --prefix=#{prefix} --install-scripts=#{prefix}/bin --install-lib=#{prefix/site_packages(python)} --single-version-externally-managed --record=installed.txt ] end |
.site_packages(python = "python3.7") ⇒ String
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.
23 24 25 26 27 28 29 |
# File 'language/python.rb', line 23 def self.site_packages(python = "python3.7") if (python == "pypy") || (python == "pypy3") "site-packages" else "lib/python#{major_minor_version python}/site-packages" end end |
.user_site_packages(python) ⇒ Pathname
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.
72 73 74 |
# File 'language/python.rb', line 72 def self.user_site_packages(python) Pathname.new(`#{python} -c "import site; print(site.getusersitepackages())"`.chomp) end |