Export to GitHub

modwsgi - issue #319

brew Python 3.3 installation has a broken sitecustomize.py file.


Posted on Apr 29, 2014 by Quick Rhino

When using brew Python 3.3, you will see on restart the messages:

Error in sitecustomize; set PYTHONVERBOSE for traceback: ValueError: list.remove(x): x not in list

This is because brew sitecustomize.py file is broken and doesn't take into consideration that sys.prefix may not always be what it things it will. In particular, in an embedded system it will be different.

Specifically, brew has:

# Fix 2)
#   Remove brewed Python's hard-coded site-packages
sys.path.remove('/usr/local/Cellar/python3/3.3.1/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages')

That is fine for command line brew python3, but is wrong for embedded system where sys.prefix will actually be:

/usr/local/Frameworks/Python.framework/Versions/3.3

and so will not match that location.

To have things work properly with this brew python3 version, you needed to set in the Apache configuration file:

WSGIPythonHome /usr/local/Cellar/python3/3.3.1/Frameworks/Python.framework/Versions/3.3

which will override the PYTHONHOME to be what brew is expecting it to always be.

Note that they appear to have possibly fixed this issue in the sitecustomize.py file for upcoming Python 3.4 recipe.

https://github.com/Homebrew/homebrew/blob/master/Library/Formula/python3.rb

where they now use:

      # Only do this for a brewed python:
      opt_executable = '#{opt_bin}/python#{VER}'
      if os.path.realpath(sys.executable) == os.path.realpath(opt_executable):
          # Remove /System site-packages, and the Cellar site-packages
          # which we moved to lib/pythonX.Y/site-packages. Further, remove
          # HOMEBREW_PREFIX/lib/python because we later addsitedir(...).
          sys.path = [ p for p in sys.path
                       if (not p.startswith('/System') and
                           not p.startswith('#{HOMEBREW_PREFIX}/lib/python') and
                           not (p.startswith('#{rack}') and p.endswith('site-packages'))) ]

Specifically, it is now more tolerant of sys.prefix being different as it would in an embedded system.

Comment #1

Posted on Sep 16, 2014 by Quick Rhino

Closing as no specific action being taken.

Status: WontFix

Labels:
Type-Defect Priority-Medium