diff --git a/Library/Homebrew/exceptions.rb b/Library/Homebrew/exceptions.rb
index e01a60c7586722ba98518ff334cfec48c70fb4b3..1b2b2469196ad1670c126999e8f3f92ec90b649c 100644
--- a/Library/Homebrew/exceptions.rb
+++ b/Library/Homebrew/exceptions.rb
@@ -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
 
diff --git a/Library/Homebrew/language/python.rb b/Library/Homebrew/language/python.rb
index 95259c8411f45a93d9862b6a580430c136b194df..b28b1ca60ac03503eaf3035ac8cb0a5114f38576 100644
--- a/Library/Homebrew/language/python.rb
+++ b/Library/Homebrew/language/python.rb
@@ -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