aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew/requirements/python_dependency.rb
diff options
context:
space:
mode:
authorSamuel John2013-06-07 14:28:27 +0200
committerSamuel John2013-06-07 17:58:56 +0200
commitfe896570a6f26624dd2e3dda5233f943ec1f7714 (patch)
tree1c216f25ff4e8a7164d8874a6f4cf9e6c0324ecd /Library/Homebrew/requirements/python_dependency.rb
parent951820e138bcdff9f35055fb0e14826197a62e61 (diff)
downloadhomebrew-fe896570a6f26624dd2e3dda5233f943ec1f7714.tar.bz2
Python: Don't print warning about PYTHONPATH
Authors should use `python.standard_caveats` instead. * Accessor for python.binary * Made `python.brewed?` more robust if no python found at all * python.brewed? is more relaxed now and allows older versions of the Python formula. * Only print about wrining sitecustomize.py and distutils.cfg if verbose and debug.
Diffstat (limited to 'Library/Homebrew/requirements/python_dependency.rb')
-rw-r--r--Library/Homebrew/requirements/python_dependency.rb45
1 files changed, 20 insertions, 25 deletions
diff --git a/Library/Homebrew/requirements/python_dependency.rb b/Library/Homebrew/requirements/python_dependency.rb
index dffa72fb5..3ba2e08cc 100644
--- a/Library/Homebrew/requirements/python_dependency.rb
+++ b/Library/Homebrew/requirements/python_dependency.rb
@@ -18,6 +18,7 @@ class PythonInstalled < Requirement
attr_reader :if3then3
attr_reader :site_packages
attr_accessor :site_packages
+ attr_accessor :binary # The python.rb formula needs to set the binary
fatal true # you can still make Python optional by `depends_on :python => :optional`
@@ -62,14 +63,14 @@ class PythonInstalled < Requirement
# that binary for later usage. (See Formula#python)
satisfy :build_env => false do
@unsatisfied_because = ''
- if binary.nil?
- @unsatisfied_because += "But no `#{@name}` found in your PATH! Consider to `brew install #{@name}`."
+ if binary.nil? || !binary.executable?
+ @unsatisfied_because += "No `#{@name}` found in your PATH! Consider to `brew install #{@name}`."
false
elsif pypy?
@unsatisfied_because += "Your #{@name} executable appears to be a PyPy, which is not supported."
false
elsif version.major != @min_version.major
- @unsatisfied_because += "No Python #{@min_version.major}.x found!"
+ @unsatisfied_because += "No Python #{@min_version.major}.x found in your PATH! --> `brew install #{@name}`?"
false
elsif version < @min_version
@unsatisfied_because += "Python version #{version} is too old (need at least #{@min_version})."
@@ -77,30 +78,21 @@ class PythonInstalled < Requirement
elsif @min_version.major == 2 && `python -c "import sys; print(sys.version_info[0])"`.strip == "3"
@unsatisfied_because += "Your `python` points to a Python 3.x. This is not supported."
else
- # If everything satisfied, we check the PYTHONPATH, that has to be set for non-brewed Python
- if !brewed? && (ENV['PYTHONPATH'].nil? || !ENV['PYTHONPATH'].include?(global_site_packages)) then
- opoo <<-EOS.undent
- For non-brewed Python, you have to set the PYTHONPATH in order to
- find brewed Python modules.
- export PYTHONPATH=#{global_site_packages}:$PYTHONPATH
- EOS
- # This is just to shut up a second run of satisfy.
- ENV['PYTHONPATH'] = global_site_packages.to_s
- end
true
end
end
# The full path to the python or python3 executable, depending on `version`.
def binary
- if brewed?
- # If the python is brewed we always prefer it!
- # Note, we don't support homebrew/versions/pythonXX.rb, though.
- Formula.factory(@name).opt_prefix/"bin/python#{@min_version.major}"
- else
- p = which(@name)
- raise "PythonInstalled: #{p} is not executable" if !p.nil? && !p.executable?
- p
+ @binary ||= begin
+ if brewed?
+ # If the python is brewed we always prefer it!
+ # Note, we don't support homebrew/versions/pythonXX.rb, though.
+ Formula.factory(@name).opt_prefix/"bin/python#{@min_version.major}"
+ else
+ # This should find at least system python, because /usr/bin is in PATH:
+ which(@name)
+ end
end
end
@@ -168,8 +160,7 @@ class PythonInstalled < Requirement
def brewed?
@brewed ||= begin
require 'formula'
- f = Formula.factory(@name)
- f.installed? && f.linked_keg.exist?
+ (Formula.factory(@name).opt_prefix/"bin/#{@name}").executable?
end
end
@@ -211,9 +202,12 @@ class PythonInstalled < Requirement
end
def modify_build_environment
+ # Most methods fail if we don't have a binary.
+ return false if binary.nil?
+
# Write our sitecustomize.py
file = global_site_packages/"sitecustomize.py"
- ohai "Writing #{file}" if ARGV.verbose? || ARGV.homebrew_developer?
+ ohai "Writing #{file}" if ARGV.verbose? && ARGV.debug?
[".pyc", ".pyo", ".py"].map{ |f|
global_site_packages/"sitecustomize#{f}"
}.each{ |f| f.delete if f.exist? }
@@ -239,7 +233,7 @@ class PythonInstalled < Requirement
if brewed?
require 'formula'
file = Formula.factory(@name).prefix/"Frameworks/Python.framework/Versions/#{version.major}.#{version.minor}/lib/#{xy}/distutils/distutils.cfg"
- ohai "Writing #{file}" if ARGV.verbose? || ARGV.homebrew_developer?
+ ohai "Writing #{file}" if ARGV.verbose? && ARGV.debug?
file.delete if file.exist?
file.write <<-EOF.undent
[global]
@@ -249,6 +243,7 @@ class PythonInstalled < Requirement
prefix=#{HOMEBREW_PREFIX}
EOF
end
+ true
end
def sitecustomize