Module: Language::Python::Virtualenv

Defined in:
brew/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”, “with-python@2”, and “without-python@2” formula options are handled correctly even if not associated with any corresponding depends_on statement.

Returns:

  • (Boolean)


140
141
142
143
144
# File 'brew/Library/Homebrew/language/python.rb', line 140

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

  (requirements.to_a | deps).any? { |r| r.name == 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:



111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
# File 'brew/Library/Homebrew/language/python.rb', line 111

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 python2, or to resolve an ambiguous case where it’s not clear whether python or python2 should be the default guess.



153
154
155
156
157
158
159
160
161
162
163
164
165
166
# File 'brew/Library/Homebrew/language/python.rb', line 153

def virtualenv_install_with_resources(options = {})
  python = options[:using]
  if python.nil?
    wanted = %w[python python@2 python2 python3 python@3 pypy pypy3].select { |py| needs_python?(py) }
    raise FormulaAmbiguousPythonError, self if wanted.size > 1

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