Module: Language::Python::Virtualenv
- Extended by:
- T::Sig
- Defined in:
- language/python.rb
Overview
Mixin module for Formula adding virtualenv support features.
Defined Under Namespace
Classes: Virtualenv
Instance Method Summary collapse
-
#needs_python?(python) ⇒ Boolean
private
Returns true if a formula option for the specified python is currently active or if the specified python is required by the formula.
-
#python_names ⇒ Array<String>
-
#virtualenv_create(venv_root, python = "python", formula = self, system_site_packages: true) ⇒ 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.
-
#virtualenv_install_with_resources(using: nil, system_site_packages: true) ⇒ Object
Helper method for the common case of installing a Python application.
Instance Method Details
#needs_python?(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.
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”, and :python3. 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.
164 165 166 167 168 |
# File '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 |
#python_names ⇒ Array<String>
194 195 196 |
# File 'language/python.rb', line 194 def python_names %w[python python3 pypy pypy3] + Formula.names.select { |name| name.start_with? "python@" } end |
#virtualenv_create(venv_root, python = "python", formula = self, system_site_packages: true) ⇒ 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.
131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 |
# File 'language/python.rb', line 131 def virtualenv_create(venv_root, python = "python", formula = self, system_site_packages: true) ENV.refurbish_args venv = Virtualenv.new formula, venv_root, python venv.create(system_site_packages: system_site_packages) # Find any Python bindings provided by recursive dependencies formula_deps = formula.recursive_dependencies pth_contents = formula_deps.map do |d| next if d.build? || d.test? # Do not add the main site-package provided by the brewed # Python formula, to keep the virtual-env's site-package pristine next if python_names.include? d.name 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(using: nil, system_site_packages: true) ⇒ Object
Helper method for the common case of installing a Python application.
Creates a virtualenv in libexec
, installs all resource
s 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 python@x.y, or to resolve an ambiguous
case where it’s not clear whether python or python@x.y should be the
default guess.
177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 |
# File 'language/python.rb', line 177 def virtualenv_install_with_resources(using: nil, system_site_packages: true) python = using if python.nil? wanted = python_names.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("@"), system_site_packages: system_site_packages) venv.pip_install resources venv.pip_install_and_link buildpath venv end |