Don't rely on 2to3 to properly rewrite execfile()
distribute uses execfile('setup.py', ...) in setuptools/sandbox.py, and relies on 2to3 to rewrite this to exec(compile(open('setup.py').read(), ...) however this breaks Python 3 installations where the setup.py has a BOM.
The reason is that Python 3's open('setup.py') by default opens the file in text mode, which leaves the BOM as a leading unprintable \ufeff character. This crashes compile() with a SyntaxError.
As an example, try to pip install mimeparse into a Python 3.3 virtualenv. mimeparse's setup.py has a BOM.
Python's built-in compile() does the right thing when the BOM'd setup.py is read in binary mode though, as you can see by explicitly using compile(open('setup.py', 'rb').read(), ...)
Should 2to3 be rewriting execfile() into a binary open? I'm not sure. But it would be easy enough for distribute to explicitly use this pattern (which should be safe in Python 2 as well) instead of relying on 2to3 to rewrite the execfile() call correctly.