# Buggy code
def _make_single_record(self, package_filename):
    if not package_filename.endswith(CONDA_TARBALL_EXTENSION):
        package_filename += CONDA_TARBALL_EXTENSION

    package_tarball_full_path = join(self.pkgs_dir, package_filename)
    log.trace("adding to package cache %s", package_tarball_full_path)
    extracted_package_dir = package_tarball_full_path[: -len(CONDA_TARBALL_EXTENSION)]

    # try reading info/repodata_record.json
    try:
        repodata_record = read_repodata_json(extracted_package_dir)
        package_cache_record = PackageCacheRecord.from_objects(
            repodata_record,
            package_tarball_full_path=package_tarball_full_path,
            extracted_package_dir=extracted_package_dir,
        )
        return package_cache_record
    except (IOError, OSError, JSONDecodeError) as e:
        # IOError / OSError if info/repodata_record.json doesn't exists
        # JsonDecodeError if info/repodata_record.json is partially extracted or corrupted
        #   python 2.7 raises ValueError instead of JsonDecodeError
        #   ValueError("No JSON object could be decoded")
        log.debug(
            "unable to read %s\n  because %r",
            join(extracted_package_dir, "info", "repodata_record.json"),
            e,
        )

        # try reading info/index.json
        try:
            index_json_record = read_index_json(extracted_package_dir)
        except (IOError, OSError, JSONDecodeError) as e:
            # IOError / OSError if info/index.json doesn't exist
            # JsonDecodeError if info/index.json is partially extracted or corrupted
            #   python 2.7 raises ValueError instead of JsonDecodeError
            #   ValueError("No JSON object could be decoded")
            log.debug(
                "unable to read %s\n  because",
                join(extracted_package_dir, "info", "index.json"),
                e,
            )

            if isdir(extracted_package_dir) and not isfile(package_tarball_full_path):
                # We have a directory that looks like a conda package, but without
                # (1) info/repodata_record.json or info/index.json, and (2) a conda package
                # tarball, there's not much we can do.  We'll just ignore it.
                return None

            try:
                if self.is_writable:
                    if isdir(extracted_package_dir):
                        # We have a partially unpacked conda package directory. Best thing
                        # to do is remove it and try extracting.
                        rm_rf(extracted_package_dir)
                    extract_tarball(package_tarball_full_path, extracted_package_dir)
                    try:
                        index_json_record = read_index_json(extracted_package_dir)
                    except (IOError, OSError, JSONDecodeError):
                        # At this point, we can assume the package tarball is bad.
                        # Remove everything and move on.
                        rm_rf(package_tarball_full_path)
                        rm_rf(extracted_package_dir)
                        return None
                else:
                    index_json_record = read_index_json_from_tarball(
                        package_tarball_full_path
                    )
            except (EOFError, ReadError) as e:
                # EOFError: Compressed file ended before the end-of-stream marker was reached
                # tarfile.ReadError: file could not be opened successfully
                # We have a corrupted tarball. Remove the tarball so it doesn't affect
                # anything, and move on.
                log.debug(
                    "unable to extract info/index.json from %s\n  because %r",
                    package_tarball_full_path,
                    e,
                )
                rm_rf(package_tarball_full_path)
                return None

        # we were able to read info/index.json, so let's continue
        if isfile(package_tarball_full_path):
            md5 = compute_md5sum(package_tarball_full_path)
        else:
            md5 = None

        url = first(self._urls_data, lambda x: basename(x) == package_filename)
        package_cache_record = PackageCacheRecord.from_objects(
            index_json_record,
            url=url,
            md5=md5,
            package_tarball_full_path=package_tarball_full_path,
            extracted_package_dir=extracted_package_dir,
        )

        # write the info/repodata_record.json file so we can short-circuit this next time
        if self.is_writable:
            repodata_record = PackageRecord.from_objects(package_cache_record)
            repodata_record_path = join(
                extracted_package_dir, "info", "repodata_record.json"
            )
            try:
                write_as_json_to_file(repodata_record_path, repodata_record)
            except (IOError, OSError) as e:
                if e.errno in (EACCES, EPERM) and isdir(dirname(repodata_record_path)):
                    raise NotWritableError(repodata_record_path, e.errno, caused_by=e)
                else:
                    raise

        return package_cache_record


# Traceback (FileNotFoundError)
error: FileNotFoundError(2, 'No such file or directory')
command: C:\Users\Anurag\Anaconda3\Scripts\conda install spyder
user_agent: conda/4.4.7 requests/2.13.0 CPython/3.6.2 Windows/10 Windows/10.0.16299
_messageid: -9223372036837325447
_messagetime: 1515540414747 / 2018-01-09 17:26:54

Traceback (most recent call last):
File "C:\Users\Anurag\Anaconda3\lib\site-packages\conda\core\package_cache.py", line 270, in _make_single_record
repodata_record = read_repodata_json(extracted_package_dir)
File "C:\Users\Anurag\Anaconda3\lib\site-packages\conda\gateways\disk\read.py", line 123, in read_repodata_json
with open(join(extracted_package_directory, 'info', 'repodata_record.json')) as fi:
File "C:\Users\Anurag\Anaconda3\lib\site-packages\conda\common\compat.py", line 120, in open
closefd=closefd)
FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\Anurag\\Anaconda3\\pkgs\\pip-9.0.1-py36_1\\info\\repodata_record.json'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:\Users\Anurag\Anaconda3\lib\site-packages\conda\core\package_cache.py", line 287, in _make_single_record
index_json_record = read_index_json(extracted_package_dir)
File "C:\Users\Anurag\Anaconda3\lib\site-packages\conda\gateways\disk\read.py", line 111, in read_index_json
with open(join(extracted_package_directory, 'info', 'index.json')) as fi:
File "C:\Users\Anurag\Anaconda3\lib\site-packages\conda\common\compat.py", line 120, in open
closefd=closefd)
FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\Anurag\\Anaconda3\\pkgs\\pip-9.0.1-py36_1\\info\\index.json'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:\Users\Anurag\Anaconda3\lib\site-packages\conda\exceptions.py", line 743, in __call__
return func(*args, **kwargs)
File "C:\Users\Anurag\Anaconda3\lib\site-packages\conda\cli\main.py", line 78, in _main
exit_code = do_call(args, p)
File "C:\Users\Anurag\Anaconda3\lib\site-packages\conda\cli\conda_argparse.py", line 76, in do_call
exit_code = getattr(module, func_name)(args, parser)
File "C:\Users\Anurag\Anaconda3\lib\site-packages\conda\cli\main_install.py", line 11, in execute
install(args, parser, 'install')
File "C:\Users\Anurag\Anaconda3\lib\site-packages\conda\cli\install.py", line 255, in install
handle_txn(progressive_fetch_extract, unlink_link_transaction, prefix, args, newenv)
File "C:\Users\Anurag\Anaconda3\lib\site-packages\conda\cli\install.py", line 272, in handle_txn
unlink_link_transaction.display_actions(progressive_fetch_extract)
File "C:\Users\Anurag\Anaconda3\lib\site-packages\conda\core\link.py", line 706, in display_actions
legacy_action_groups = self.make_legacy_action_groups(pfe)
File "C:\Users\Anurag\Anaconda3\lib\site-packages\conda\core\link.py", line 689, in make_legacy_action_groups
pfe.prepare()
File "C:\Users\Anurag\Anaconda3\lib\site-packages\conda\common\io.py", line 415, in decorated
return f(*args, **kwds)
File "C:\Users\Anurag\Anaconda3\lib\site-packages\conda\core\package_cache.py", line 540, in prepare
for prec in self.link_precs)
File "C:\Users\Anurag\Anaconda3\lib\site-packages\conda\core\package_cache.py", line 540, in <genexpr>
for prec in self.link_precs)
File "C:\Users\Anurag\Anaconda3\lib\site-packages\conda\core\package_cache.py", line 434, in make_actions_for_record
), None)
File "C:\Users\Anurag\Anaconda3\lib\site-packages\conda\core\package_cache.py", line 431, in <genexpr>
pcrec for pcrec in concat(PackageCache(pkgs_dir).query(pref_or_spec)
File "C:\Users\Anurag\Anaconda3\lib\site-packages\conda\core\package_cache.py", line 432, in <genexpr>
for pkgs_dir in context.pkgs_dirs)
File "C:\Users\Anurag\Anaconda3\lib\site-packages\conda\core\package_cache.py", line 118, in query
return (pcrec for pcrec in itervalues(self._package_cache_records) if pcrec == param)
File "C:\Users\Anurag\Anaconda3\lib\site-packages\conda\core\package_cache.py", line 211, in _package_cache_records
self.load()
File "C:\Users\Anurag\Anaconda3\lib\site-packages\conda\core\package_cache.py", line 90, in load
package_cache_record = self._make_single_record(base_name)
File "C:\Users\Anurag\Anaconda3\lib\site-packages\conda\core\package_cache.py", line 308, in _make_single_record
extract_tarball(package_tarball_full_path, extracted_package_dir)
File "C:\Users\Anurag\Anaconda3\lib\site-packages\conda\gateways\disk\create.py", line 145, in extract_tarball
t.extractall(path=destination_directory, members=members_with_progress())
File "C:\Users\Anurag\Anaconda3\lib\tarfile.py", line 2007, in extractall
numeric_owner=numeric_owner)
File "C:\Users\Anurag\Anaconda3\lib\tarfile.py", line 2049, in extract
numeric_owner=numeric_owner)
File "C:\Users\Anurag\Anaconda3\lib\tarfile.py", line 2119, in _extract_member
self.makefile(tarinfo, targetpath)
File "C:\Users\Anurag\Anaconda3\lib\tarfile.py", line 2160, in makefile
with bltn_open(targetpath, "wb") as target:
FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\Anurag\\Anaconda3\\pkgs\\pip-9.0.1-py36_1\\Lib\\site-packages\\pip\\_vendor\\cachecontrol\\__pycache__\\filewrapper.cpython-36.pyc'

# Fixed code
def _make_single_record(self, package_filename):
    if not package_filename.endswith(CONDA_TARBALL_EXTENSION):
        package_filename += CONDA_TARBALL_EXTENSION

    package_tarball_full_path = join(self.pkgs_dir, package_filename)
    log.trace("adding to package cache %s", package_tarball_full_path)
    extracted_package_dir = package_tarball_full_path[: -len(CONDA_TARBALL_EXTENSION)]

    # try reading info/repodata_record.json
    try:
        repodata_record = read_repodata_json(extracted_package_dir)
        package_cache_record = PackageCacheRecord.from_objects(
            repodata_record,
            package_tarball_full_path=package_tarball_full_path,
            extracted_package_dir=extracted_package_dir,
        )
        return package_cache_record
    except (IOError, OSError, JSONDecodeError) as e:
        # IOError / OSError if info/repodata_record.json doesn't exists
        # JsonDecodeError if info/repodata_record.json is partially extracted or corrupted
        #   python 2.7 raises ValueError instead of JsonDecodeError
        #   ValueError("No JSON object could be decoded")
        log.debug(
            "unable to read %s\n  because %r",
            join(extracted_package_dir, "info", "repodata_record.json"),
            e,
        )

        # try reading info/index.json
        try:
            index_json_record = read_index_json(extracted_package_dir)
        except (IOError, OSError, JSONDecodeError) as e:
            # IOError / OSError if info/index.json doesn't exist
            # JsonDecodeError if info/index.json is partially extracted or corrupted
            #   python 2.7 raises ValueError instead of JsonDecodeError
            #   ValueError("No JSON object could be decoded")
            log.debug(
                "unable to read %s\n  because",
                join(extracted_package_dir, "info", "index.json"),
                e,
            )

            if isdir(extracted_package_dir) and not isfile(package_tarball_full_path):
                # We have a directory that looks like a conda package, but without
                # (1) info/repodata_record.json or info/index.json, and (2) a conda package
                # tarball, there's not much we can do.  We'll just ignore it.
                return None

            try:
                if self.is_writable:
                    if isdir(extracted_package_dir):
                        # We have a partially unpacked conda package directory. Best thing
                        # to do is remove it and try extracting.
                        rm_rf(extracted_package_dir)
                    try:
                        extract_tarball(
                            package_tarball_full_path, extracted_package_dir
                        )
                    except EnvironmentError as e:
                        if e.errno == ENOENT:
                            # FileNotFoundError(2, 'No such file or directory')
                            # At this point, we can assume the package tarball is bad.
                            # Remove everything and move on.
                            # see https://github.com/conda/conda/issues/6707
                            rm_rf(package_tarball_full_path)
                            rm_rf(extracted_package_dir)
                    try:
                        index_json_record = read_index_json(extracted_package_dir)
                    except (IOError, OSError, JSONDecodeError):
                        # At this point, we can assume the package tarball is bad.
                        # Remove everything and move on.
                        rm_rf(package_tarball_full_path)
                        rm_rf(extracted_package_dir)
                        return None
                else:
                    index_json_record = read_index_json_from_tarball(
                        package_tarball_full_path
                    )
            except (EOFError, ReadError) as e:
                # EOFError: Compressed file ended before the end-of-stream marker was reached
                # tarfile.ReadError: file could not be opened successfully
                # We have a corrupted tarball. Remove the tarball so it doesn't affect
                # anything, and move on.
                log.debug(
                    "unable to extract info/index.json from %s\n  because %r",
                    package_tarball_full_path,
                    e,
                )
                rm_rf(package_tarball_full_path)
                return None

        # we were able to read info/index.json, so let's continue
        if isfile(package_tarball_full_path):
            md5 = compute_md5sum(package_tarball_full_path)
        else:
            md5 = None

        url = first(self._urls_data, lambda x: basename(x) == package_filename)
        package_cache_record = PackageCacheRecord.from_objects(
            index_json_record,
            url=url,
            md5=md5,
            package_tarball_full_path=package_tarball_full_path,
            extracted_package_dir=extracted_package_dir,
        )

        # write the info/repodata_record.json file so we can short-circuit this next time
        if self.is_writable:
            repodata_record = PackageRecord.from_objects(package_cache_record)
            repodata_record_path = join(
                extracted_package_dir, "info", "repodata_record.json"
            )
            try:
                write_as_json_to_file(repodata_record_path, repodata_record)
            except (IOError, OSError) as e:
                if e.errno in (EACCES, EPERM) and isdir(dirname(repodata_record_path)):
                    raise NotWritableError(repodata_record_path, e.errno, caused_by=e)
                else:
                    raise

        return package_cache_record