# Buggy code
def _copy_dist_from_dir(link_path, location):
    """Copy distribution files in `link_path` to `location`.

    Invoked when user requests to install a local directory. E.g.:

        pip install .
        pip install ~/dev/git-repos/python-prompt-toolkit

    """

    # Note: This is currently VERY SLOW if you have a lot of data in the
    # directory, because it copies everything with `shutil.copytree`.
    # What it should really do is build an sdist and install that.
    # See https://github.com/pypa/pip/issues/2195

    if os.path.isdir(location):
        rmtree(location)

    # build an sdist
    setup_py = "setup.py"
    sdist_args = [sys.executable]
    sdist_args.append("-c")
    sdist_args.append(
        "import setuptools, tokenize;__file__=%r;"
        "exec(compile(getattr(tokenize, 'open', open)(__file__).read()"
        ".replace('\\r\\n', '\\n'), __file__, 'exec'))" % setup_py
    )
    sdist_args.append("sdist")
    sdist_args += ["--dist-dir", location]
    logger.info("Running setup.py sdist for %s", link_path)

    with indent_log():
        call_subprocess(sdist_args, cwd=link_path, show_stdout=False)

    # unpack sdist into `location`
    sdist = os.path.join(location, os.listdir(location)[0])
    logger.info("Unpacking sdist %s into %s", sdist, location)
    unpack_file(sdist, location, content_type=None, link=None)


# 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 _copy_dist_from_dir(link_path, location):
    """Copy distribution files in `link_path` to `location`.

    Invoked when user requests to install a local directory. E.g.:

        pip install .
        pip install ~/dev/git-repos/python-prompt-toolkit

    """

    # Note: This is currently VERY SLOW if you have a lot of data in the
    # directory, because it copies everything with `shutil.copytree`.
    # What it should really do is build an sdist and install that.
    # See https://github.com/pypa/pip/issues/2195

    if os.path.isdir(location):
        rmtree(location)

    # build an sdist
    setup_py = "setup.py"
    sdist_args = [sys.executable]
    sdist_args.append("-c")
    sdist_args.append(SETUPTOOLS_SHIM % setup_py)
    sdist_args.append("sdist")
    sdist_args += ["--dist-dir", location]
    logger.info("Running setup.py sdist for %s", link_path)

    with indent_log():
        call_subprocess(sdist_args, cwd=link_path, show_stdout=False)

    # unpack sdist into `location`
    sdist = os.path.join(location, os.listdir(location)[0])
    logger.info("Unpacking sdist %s into %s", sdist, location)
    unpack_file(sdist, location, content_type=None, link=None)