Skip to content
Snippets Groups Projects
Commit 1e1903e4 authored by Mike McQuaid's avatar Mike McQuaid Committed by GitHub
Browse files

Merge pull request #636 from ilovezfs/spooky_python

virtualenv_install_with_resources: select correct python
parents 35ee2831 23a38e0f
No related branches found
No related tags found
No related merge requests found
......@@ -294,6 +294,17 @@ class FormulaConflictError < RuntimeError
end
end
class FormulaAmbiguousPythonError < RuntimeError
def initialize(formula)
super <<-EOS.undent
The version of python to use with the virtualenv in the `#{formula.full_name}` formula
cannot be guessed automatically. If the simultaneous use of python and python3
is intentional, please add `:using => "python"` or `:using => "python3"` to
`virtualenv_install_with_resources` to resolve the ambiguity manually.
EOS
end
end
class BuildError < RuntimeError
attr_reader :formula, :env
......
......@@ -139,11 +139,33 @@ module Language
venv
end
# 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", "python3", :python, and :python3. Note that
# "with-python", "without-python", "with-python3", and "without-python3"
# formula options are handled correctly even if not associated with any
# corresponding depends_on statement.
# @api private
def needs_python?(python)
return true if build.with?(python)
(requirements.to_a | deps).any? { |r| r.name == python && r.required? }
end
# 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.
def virtualenv_install_with_resources
venv = virtualenv_create(libexec)
# on the formula, and then installs the formula. An options hash may be
# passed (e.g., :using => "python3") to override the default, guessed
# formula preference for python or python3, or to resolve an ambiguous
# case where it's not clear whether python or python3 should be the
# default guess.
def virtualenv_install_with_resources(options = {})
python = options[:using]
if python.nil?
wanted = %w[python python3].select { |py| needs_python?(py) }
raise FormulaAmbiguousPythonError, self if wanted.size > 1
python = wanted.first || "python"
end
venv = virtualenv_create(libexec, python)
venv.pip_install resources
venv.pip_install_and_link buildpath
venv
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment