Module: Language::Python::Virtualenv

Defined in:
Library/Homebrew/language/python.rb

Overview

Mixin module for Formula adding virtualenv support features.

Defined Under Namespace

Classes: Virtualenv

Instance Method Summary collapse

Instance Method Details

#needs_python?(python) ⇒ Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns true if a formula option for the specified python is currently active or if the specified python is required by the formula. Valid inputs are "python", "python2", :python, and :python2. Note that "with-python", "without-python", "[email protected]", and "[email protected]" formula options are handled correctly even if not associated with any corresponding depends_on statement.

Returns:

  • (Boolean)

164
165
166
167
168
# File 'Library/Homebrew/language/python.rb', line 164

def needs_python?(python)
  return true if build.with?(python)

  (requirements.to_a | deps).any? { |r| r.name.split("/").last == python && r.required? }
end

#virtualenv_create(venv_root, python = "python", formula = self) ⇒ Virtualenv

Instantiates, creates, and yields a Virtualenv object for use from Formula#install, which provides helper methods for instantiating and installing packages into a Python virtualenv.

Parameters:

  • venv_root (Pathname, String)

    the path to the root of the virtualenv (often libexec/"venv")

  • python (String) (defaults to: "python")

    which interpreter to use (e.g. "python" or "python2")

  • formula (Formula) (defaults to: self)

    the active Formula

Returns:


135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
# File 'Library/Homebrew/language/python.rb', line 135

def virtualenv_create(venv_root, python = "python", formula = self)
  ENV.refurbish_args
  venv = Virtualenv.new formula, venv_root, python
  venv.create

  # Find any Python bindings provided by recursive dependencies
  formula_deps = formula.recursive_dependencies
  pth_contents = formula_deps.map do |d|
    next if d.build?

    dep_site_packages = Formula[d.name].opt_prefix/Language::Python.site_packages(python)
    next unless dep_site_packages.exist?

    "import site; site.addsitedir('#{dep_site_packages}')\n"
  end.compact
  unless pth_contents.empty?
    (venv_root/Language::Python.site_packages(python)/"homebrew_deps.pth").write pth_contents.join
  end

  venv
end

#virtualenv_install_with_resources(options = {}) ⇒ Object

Helper method for the common case of installing a Python application. Creates a virtualenv in libexec, installs all resources defined on the formula, and then installs the formula. An options hash may be passed (e.g., :using => "python") to override the default, guessed formula preference for python or [email protected], or to resolve an ambiguous case where it's not clear whether python or [email protected] should be the default guess.


177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
# File 'Library/Homebrew/language/python.rb', line 177

def virtualenv_install_with_resources(options = {})
  python = options[:using]
  if python.nil?
    pythons = %w[python python3 [email protected] [email protected] [email protected] pypy pypy3]
    wanted = pythons.select { |py| needs_python?(py) }
    raise FormulaUnknownPythonError, self if wanted.empty?
    raise FormulaAmbiguousPythonError, self if wanted.size > 1

    python = wanted.first
    python = "python3" if python == "python"
  end
  venv = virtualenv_create(libexec, python.delete("@"))
  venv.pip_install resources
  venv.pip_install_and_link buildpath
  venv
end