# Buggy code
def install_editable(self, install_options, global_options=(), prefix=None):
    logger.info("Running setup.py develop for %s", self.name)

    if self.isolated:
        global_options = list(global_options) + ["--no-user-cfg"]

    if prefix:
        prefix_param = ["--prefix={0}".format(prefix)]
        install_options = list(install_options) + prefix_param

    with indent_log():
        # FIXME: should we do --install-headers here too?
        cwd = self.source_dir
        if self.editable_options and "subdirectory" in self.editable_options:
            cwd = os.path.join(cwd, self.editable_options["subdirectory"])
        call_subprocess(
            [
                sys.executable,
                "-c",
                "import setuptools, tokenize; __file__=%r; exec(compile("
                "getattr(tokenize, 'open', open)(__file__).read().replace"
                "('\\r\\n', '\\n'), __file__, 'exec'))" % self.setup_py,
            ]
            + list(global_options)
            + ["develop", "--no-deps"]
            + list(install_options),
            cwd=cwd,
            show_stdout=False,
        )

    self.install_succeeded = True


# Traceback (UnicodeDecodeError)
$ pip wheel --wheel-dir .  -v pysmfDownloading/unpacking pysmf
Downloading pysmf-0.1.1.tar.gz (50kB):
Downloading from URL https://pypi.python.org/packages/source/p/pysmf/pysmf-0.1.1.tar.gz#md5=8354f3cd7752b12e2668d4ed9aaa25c9 (from https://pypi.python.org/simple/pysmf/)
...Downloading pysmf-0.1.1.tar.gz (50kB): 50kB downloaded
Storing download in cache at ./.pip_download_cache/https%3A%2F%2Fpypi.python.org%2Fpackages%2Fsource%2Fp%2Fpysmf%2Fpysmf-0.1.1.tar.gz
Running setup.py (path:/home/chris/tmp/pip_build_chris/pysmf/setup.py) egg_info for package pysmf
running egg_info
creating pip-egg-info/pysmf.egg-info
writing pip-egg-info/pysmf.egg-info/PKG-INFO
writing top-level names to pip-egg-info/pysmf.egg-info/top_level.txt
writing dependency_links to pip-egg-info/pysmf.egg-info/dependency_links.txt
writing manifest file 'pip-egg-info/pysmf.egg-info/SOURCES.txt'
warning: manifest_maker: standard file '-c' not found

reading manifest file 'pip-egg-info/pysmf.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
writing manifest file 'pip-egg-info/pysmf.egg-info/SOURCES.txt'
Building wheels for collected packages: pysmf
Running setup.py bdist_wheel for pysmf
Destination directory: /home/chris
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/usr/lib/python3.4/encodings/ascii.py", line 26, in decode
return codecs.ascii_decode(input, self.errors)[0]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 1623: ordinal not in range(128)
Complete output from command /usr/bin/python -c "import setuptools;__file__='/home/chris/tmp/pip_build_chris/pysmf/setup.py';exec(compile(open(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" bdist_wheel -d /home/chris:
Traceback (most recent call last):

File "<string>", line 1, in <module>

File "/usr/lib/python3.4/encodings/ascii.py", line 26, in decode

return codecs.ascii_decode(input, self.errors)[0]

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 1623: ordinal not in range(128)

----------------------------------------
Failed building wheel for pysmf
Failed to build pysmf
Cleaning up...
Removing temporary dir /home/chris/tmp/pip_build_chris...

# Fixed code
def install_editable(self, install_options, global_options=(), prefix=None):
    logger.info("Running setup.py develop for %s", self.name)

    if self.isolated:
        global_options = list(global_options) + ["--no-user-cfg"]

    if prefix:
        prefix_param = ["--prefix={0}".format(prefix)]
        install_options = list(install_options) + prefix_param

    with indent_log():
        # FIXME: should we do --install-headers here too?
        cwd = self.source_dir
        if self.editable_options and "subdirectory" in self.editable_options:
            cwd = os.path.join(cwd, self.editable_options["subdirectory"])
        call_subprocess(
            [sys.executable, "-c", SETUPTOOLS_SHIM % self.setup_py]
            + list(global_options)
            + ["develop", "--no-deps"]
            + list(install_options),
            cwd=cwd,
            show_stdout=False,
        )

    self.install_succeeded = True