Replace basestring and _unicode hacks with str, and long with int.

Signed-off-by: Michał Górny <mgo...@gentoo.org>
---
 bin/egencache                                 |  7 +--
 lib/_emerge/BinpkgFetcher.py                  |  5 +-
 lib/_emerge/BlockerCache.py                   | 19 ++-----
 lib/_emerge/BlockerDB.py                      |  4 +-
 lib/_emerge/FakeVartree.py                    | 11 +---
 lib/_emerge/JobStatusDisplay.py               |  7 +--
 lib/_emerge/Package.py                        | 27 ++++-----
 lib/_emerge/Scheduler.py                      |  5 +-
 lib/_emerge/actions.py                        | 21 +++----
 lib/_emerge/create_world_atom.py              |  8 +--
 lib/_emerge/depgraph.py                       | 15 ++---
 lib/_emerge/main.py                           |  4 +-
 lib/_emerge/resolver/output.py                | 26 ++++-----
 lib/_emerge/resolver/output_helpers.py        |  6 +-
 lib/_emerge/resolver/slot_collision.py        |  6 +-
 lib/portage/__init__.py                       | 12 ++--
 lib/portage/_emirrordist/MirrorDistTask.py    |  7 +--
 lib/portage/_emirrordist/main.py              |  9 +--
 lib/portage/_sets/base.py                     |  7 +--
 lib/portage/cache/flat_hash.py                |  5 +-
 lib/portage/cache/fs_template.py              |  7 +--
 lib/portage/cache/index/pkg_desc_index.py     | 10 +---
 lib/portage/cache/metadata.py                 |  8 +--
 lib/portage/cache/sqlite.py                   |  7 +--
 lib/portage/cache/template.py                 | 19 ++-----
 lib/portage/cvstree.py                        |  3 -
 lib/portage/dbapi/bintree.py                  | 55 ++++++++-----------
 lib/portage/dbapi/porttree.py                 |  6 +-
 lib/portage/dbapi/vartree.py                  | 33 +++++------
 lib/portage/dep/__init__.py                   | 50 +++++++----------
 lib/portage/eclass_cache.py                   | 10 +---
 lib/portage/elog/__init__.py                  |  5 +-
 lib/portage/elog/mod_echo.py                  |  5 +-
 lib/portage/elog/mod_syslog.py                |  5 +-
 lib/portage/emaint/modules/binhost/binhost.py |  9 +--
 lib/portage/emaint/modules/sync/sync.py       |  9 +--
 lib/portage/exception.py                      |  9 +--
 lib/portage/getbinpkg.py                      |  5 +-
 lib/portage/locks.py                          | 17 +++---
 lib/portage/mail.py                           |  7 +--
 lib/portage/manifest.py                       | 12 +---
 lib/portage/package/ebuild/config.py          | 11 ++--
 lib/portage/package/ebuild/doebuild.py        |  8 +--
 .../package/ebuild/getmaskingstatus.py        |  7 +--
 lib/portage/process.py                        |  5 +-
 lib/portage/proxy/lazyimport.py               |  7 +--
 lib/portage/repository/config.py              |  5 +-
 lib/portage/sync/getaddrinfo_validate.py      |  6 +-
 lib/portage/sync/modules/rsync/rsync.py       |  7 +--
 lib/portage/tests/dep/test_match_from_list.py |  7 +--
 .../tests/resolver/ResolverPlayground.py      |  9 +--
 .../tests/unicode/test_string_format.py       |  7 +--
 lib/portage/update.py                         | 16 ++----
 lib/portage/util/__init__.py                  |  8 +--
 lib/portage/util/_dyn_libs/LinkageMapELF.py   |  6 +-
 .../util/_dyn_libs/PreservedLibsRegistry.py   |  7 +--
 lib/portage/util/_urlopen.py                  |  9 +--
 lib/portage/util/changelog.py                 | 10 ++--
 lib/portage/util/compression_probe.py         |  4 +-
 lib/portage/util/configparser.py              |  9 +--
 lib/portage/util/env_update.py                |  7 +--
 lib/portage/util/install_mask.py              |  9 +--
 lib/portage/versions.py                       | 17 ++----
 lib/portage/xml/metadata.py                   | 12 ++--
 repoman/lib/repoman/__init__.py               |  7 +--
 repoman/lib/repoman/main.py                   |  2 -
 repoman/lib/repoman/metadata.py               |  5 --
 .../modules/scan/metadata/ebuild_metadata.py  |  5 +-
 repoman/lib/repoman/utilities.py              |  3 -
 69 files changed, 227 insertions(+), 490 deletions(-)

diff --git a/bin/egencache b/bin/egencache
index d172319f8..0847d73a7 100755
--- a/bin/egencache
+++ b/bin/egencache
@@ -75,9 +75,6 @@ else:
        else:
                from portage.xml.metadata import parse_metadata_use
 
-if sys.hexversion >= 0x3000000:
-       # pylint: disable=W0622
-       long = int
 
 def parse_args(args):
        usage = "egencache [options] <action> ... [atom] ..."
@@ -344,7 +341,7 @@ class GenCache(object):
                                                max_mtime = ec_hash.mtime
                                if max_mtime == sc.mtime:
                                        max_mtime += 1
-                               max_mtime = long(max_mtime)
+                               max_mtime = int(max_mtime)
                                try:
                                        os.utime(ebuild_hash.location, 
(max_mtime, max_mtime))
                                except OSError as e:
@@ -709,7 +706,7 @@ class GenChangeLogs(object):
                        # This cp has not been added to the repo.
                        return
 
-               lmod = long(lmod)
+               lmod = int(lmod)
 
                try:
                        cmod = os.stat('ChangeLog')[stat.ST_MTIME]
diff --git a/lib/_emerge/BinpkgFetcher.py b/lib/_emerge/BinpkgFetcher.py
index 2e5861cc1..c26c9bd6b 100644
--- a/lib/_emerge/BinpkgFetcher.py
+++ b/lib/_emerge/BinpkgFetcher.py
@@ -17,9 +17,6 @@ from portage import os
 from portage.util._async.AsyncTaskFuture import AsyncTaskFuture
 from portage.util._pty import _create_pty_or_pipe
 
-if sys.hexversion >= 0x3000000:
-       long = int
-
 
 class BinpkgFetcher(CompositeTask):
 
@@ -185,7 +182,7 @@ class _BinpkgFetcherProcess(SpawnProcess):
                                        self.pkg.cpv)].get("_mtime_")
                                if remote_mtime is not None:
                                        try:
-                                               remote_mtime = 
long(remote_mtime)
+                                               remote_mtime = int(remote_mtime)
                                        except ValueError:
                                                pass
                                        else:
diff --git a/lib/_emerge/BlockerCache.py b/lib/_emerge/BlockerCache.py
index 53342d6d6..d0beb46ac 100644
--- a/lib/_emerge/BlockerCache.py
+++ b/lib/_emerge/BlockerCache.py
@@ -1,4 +1,4 @@
-# Copyright 1999-2013 Gentoo Foundation
+# Copyright 1999-2020 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 import errno
@@ -13,13 +13,6 @@ try:
 except ImportError:
        import pickle
 
-if sys.hexversion >= 0x3000000:
-       basestring = str
-       long = int
-       _unicode = str
-else:
-       _unicode = unicode
-
 class BlockerCache(portage.cache.mappings.MutableMapping):
        """This caches blockers of installed packages so that dep_check does not
        have to be done for every single installed package on every invocation 
of
@@ -82,7 +75,7 @@ class BlockerCache(portage.cache.mappings.MutableMapping):
                        # corruption is detected as soon as possible.
                        invalid_items = set()
                        for k, v in self._cache_data["blockers"].items():
-                               if not isinstance(k, basestring):
+                               if not isinstance(k, str):
                                        invalid_items.add(k)
                                        continue
                                try:
@@ -97,7 +90,7 @@ class BlockerCache(portage.cache.mappings.MutableMapping):
                                        invalid_items.add(k)
                                        continue
                                counter, atoms = v
-                               if not isinstance(counter, (int, long)):
+                               if not isinstance(counter, int):
                                        invalid_items.add(k)
                                        continue
                                if not isinstance(atoms, (list, tuple)):
@@ -105,7 +98,7 @@ class BlockerCache(portage.cache.mappings.MutableMapping):
                                        continue
                                invalid_atom = False
                                for atom in atoms:
-                                       if not isinstance(atom, basestring):
+                                       if not isinstance(atom, str):
                                                invalid_atom = True
                                                break
                                        if atom[:1] != "!" or \
@@ -164,8 +157,8 @@ class BlockerCache(portage.cache.mappings.MutableMapping):
                @param blocker_data: An object with counter and atoms 
attributes.
                @type blocker_data: BlockerData
                """
-               self._cache_data["blockers"][_unicode(cpv)] = 
(blocker_data.counter,
-                       tuple(_unicode(x) for x in blocker_data.atoms))
+               self._cache_data["blockers"][str(cpv)] = (blocker_data.counter,
+                       tuple(str(x) for x in blocker_data.atoms))
                self._modified.add(cpv)
 
        def __iter__(self):
diff --git a/lib/_emerge/BlockerDB.py b/lib/_emerge/BlockerDB.py
index 5b3b01c37..6122e73a8 100644
--- a/lib/_emerge/BlockerDB.py
+++ b/lib/_emerge/BlockerDB.py
@@ -1,4 +1,4 @@
-# Copyright 1999-2018 Gentoo Foundation
+# Copyright 1999-2020 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 import sys
@@ -13,8 +13,6 @@ from _emerge.BlockerCache import BlockerCache
 from _emerge.Package import Package
 from _emerge.show_invalid_depstring_notice import show_invalid_depstring_notice
 
-if sys.hexversion >= 0x3000000:
-       long = int
 
 class BlockerDB(object):
 
diff --git a/lib/_emerge/FakeVartree.py b/lib/_emerge/FakeVartree.py
index 3f82e97e9..8a9a82d8e 100644
--- a/lib/_emerge/FakeVartree.py
+++ b/lib/_emerge/FakeVartree.py
@@ -1,4 +1,4 @@
-# Copyright 1999-2013 Gentoo Foundation
+# Copyright 1999-2020 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 from __future__ import unicode_literals
@@ -19,11 +19,6 @@ from portage.update import grab_updates, parse_updates, 
update_dbentries
 from portage.versions import _pkg_str
 from _emerge.resolver.DbapiProvidesIndex import PackageDbapiProvidesIndex
 
-if sys.hexversion >= 0x3000000:
-       long = int
-       _unicode = str
-else:
-       _unicode = unicode
 
 class FakeVardbGetPath(object):
        """
@@ -167,7 +162,7 @@ class FakeVartree(vartree):
                                        raise _DynamicDepsNotApplicable()
                                for k, v in built_slot_operator_atoms.items():
                                        live_metadata[k] += (" " +
-                                               " ".join(_unicode(atom) for 
atom in v))
+                                               " ".join(str(atom) for atom in 
v))
 
                        self.dbapi.aux_update(pkg.cpv, live_metadata)
                except _DynamicDepsNotApplicable:
@@ -249,7 +244,7 @@ class FakeVartree(vartree):
                        if pkg is not None:
                                counter, mtime = real_vardb.aux_get(cpv, 
validation_keys)
                                try:
-                                       counter = long(counter)
+                                       counter = int(counter)
                                except ValueError:
                                        counter = 0
 
diff --git a/lib/_emerge/JobStatusDisplay.py b/lib/_emerge/JobStatusDisplay.py
index b8e142af9..df6a4b522 100644
--- a/lib/_emerge/JobStatusDisplay.py
+++ b/lib/_emerge/JobStatusDisplay.py
@@ -1,4 +1,4 @@
-# Copyright 1999-2015 Gentoo Foundation
+# Copyright 1999-2020 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 from __future__ import unicode_literals
@@ -16,9 +16,6 @@ from portage.output import xtermTitle
 
 from _emerge.getloadavg import getloadavg
 
-if sys.hexversion >= 0x3000000:
-       basestring = str
-
 class JobStatusDisplay(object):
 
        _bound_properties = ("curval", "failed", "running")
@@ -61,7 +58,7 @@ class JobStatusDisplay(object):
                        object.__setattr__(self, "_term_codes", term_codes)
                encoding = sys.getdefaultencoding()
                for k, v in self._term_codes.items():
-                       if not isinstance(v, basestring):
+                       if not isinstance(v, str):
                                self._term_codes[k] = v.decode(encoding, 
'replace')
 
                if self._isatty:
diff --git a/lib/_emerge/Package.py b/lib/_emerge/Package.py
index 3d7df2437..69064bd4e 100644
--- a/lib/_emerge/Package.py
+++ b/lib/_emerge/Package.py
@@ -1,4 +1,4 @@
-# Copyright 1999-2018 Gentoo Foundation
+# Copyright 1999-2020 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 from __future__ import unicode_literals
@@ -21,13 +21,6 @@ from portage.exception import InvalidData, 
InvalidDependString
 from portage.localization import _
 from _emerge.Task import Task
 
-if sys.hexversion >= 0x3000000:
-       basestring = str
-       long = int
-       _unicode = str
-else:
-       _unicode = unicode
-
 class Package(Task):
 
        __hash__ = Task.__hash__
@@ -222,7 +215,7 @@ class Package(Task):
                else:
                        raise TypeError("root_config argument is required")
 
-               elements = [type_name, root, _unicode(cpv), operation]
+               elements = [type_name, root, str(cpv), operation]
 
                # For installed (and binary) packages we don't care for the repo
                # when it comes to hashing, because there can only be one cpv.
@@ -515,7 +508,7 @@ class Package(Task):
                        cpv_color = "PKG_NOMERGE"
 
                build_id_str = ""
-               if isinstance(self.cpv.build_id, long) and self.cpv.build_id > 
0:
+               if isinstance(self.cpv.build_id, int) and self.cpv.build_id > 0:
                        build_id_str = "-%s" % self.cpv.build_id
 
                s = "(%s, %s" \
@@ -714,7 +707,7 @@ class Package(Task):
                        @return: True if all flags are valid USE values which 
may
                                be specified in USE dependencies, False 
otherwise.
                        """
-                       if isinstance(flags, basestring):
+                       if isinstance(flags, str):
                                flags = [flags]
 
                        for flag in flags:
@@ -727,7 +720,7 @@ class Package(Task):
                        """
                        @return: A list of flags missing from IUSE.
                        """
-                       if isinstance(flags, basestring):
+                       if isinstance(flags, str):
                                flags = [flags]
                        missing_iuse = []
                        for flag in flags:
@@ -873,14 +866,14 @@ class 
_PackageMetadataWrapper(_PackageMetadataWrapperBase):
                        getattr(self, "_set_" + k.lower())(k, v)
 
        def _set_inherited(self, k, v):
-               if isinstance(v, basestring):
+               if isinstance(v, str):
                        v = frozenset(v.split())
                self._pkg.inherited = v
 
        def _set_counter(self, k, v):
-               if isinstance(v, basestring):
+               if isinstance(v, str):
                        try:
-                               v = long(v.strip())
+                               v = int(v.strip())
                        except ValueError:
                                v = 0
                self._pkg.counter = v
@@ -898,9 +891,9 @@ class _PackageMetadataWrapper(_PackageMetadataWrapperBase):
                                pass
 
        def _set__mtime_(self, k, v):
-               if isinstance(v, basestring):
+               if isinstance(v, str):
                        try:
-                               v = long(v.strip())
+                               v = int(v.strip())
                        except ValueError:
                                v = 0
                self._pkg.mtime = v
diff --git a/lib/_emerge/Scheduler.py b/lib/_emerge/Scheduler.py
index 6f4564000..79f04ba1d 100644
--- a/lib/_emerge/Scheduler.py
+++ b/lib/_emerge/Scheduler.py
@@ -63,9 +63,6 @@ from _emerge.PackageMerge import PackageMerge
 from _emerge.PollScheduler import PollScheduler
 from _emerge.SequentialTaskQueue import SequentialTaskQueue
 
-if sys.hexversion >= 0x3000000:
-       basestring = str
-
 # enums
 FAILURE = 1
 
@@ -1141,7 +1138,7 @@ class Scheduler(PollScheduler):
                                        if phase not in logentries:
                                                continue
                                        for msgtype, msgcontent in 
logentries[phase]:
-                                               if isinstance(msgcontent, 
basestring):
+                                               if isinstance(msgcontent, str):
                                                        msgcontent = 
[msgcontent]
                                                for line in msgcontent:
                                                        
printer.eerror(line.strip("\n"))
diff --git a/lib/_emerge/actions.py b/lib/_emerge/actions.py
index 392f98d4d..4a0843ff5 100644
--- a/lib/_emerge/actions.py
+++ b/lib/_emerge/actions.py
@@ -94,11 +94,6 @@ from _emerge.UnmergeDepPriority import UnmergeDepPriority
 from _emerge.UseFlagDisplay import pkg_use_display
 from _emerge.UserQuery import UserQuery
 
-if sys.hexversion >= 0x3000000:
-       long = int
-       _unicode = str
-else:
-       _unicode = unicode
 
 def action_build(emerge_config, trees=DeprecationWarning,
        mtimedb=DeprecationWarning, myopts=DeprecationWarning,
@@ -854,7 +849,7 @@ def _calc_depclean(settings, trees, ldpath_mtimes,
                                                protected_set.add("=" + pkg.cpv)
                                                continue
                                except portage.exception.InvalidDependString as 
e:
-                                       show_invalid_depstring_notice(pkg, 
_unicode(e))
+                                       show_invalid_depstring_notice(pkg, 
str(e))
                                        del e
                                        protected_set.add("=" + pkg.cpv)
                                        continue
@@ -907,7 +902,7 @@ def _calc_depclean(settings, trees, ldpath_mtimes,
                                        protected_set.add("=" + pkg.cpv)
                                        continue
                        except portage.exception.InvalidDependString as e:
-                               show_invalid_depstring_notice(pkg, _unicode(e))
+                               show_invalid_depstring_notice(pkg, str(e))
                                del e
                                protected_set.add("=" + pkg.cpv)
                                continue
@@ -924,7 +919,7 @@ def _calc_depclean(settings, trees, ldpath_mtimes,
                                if excluded_set.findAtomForPackage(pkg):
                                        required_sets['__excluded__'].add("=" + 
pkg.cpv)
                        except portage.exception.InvalidDependString as e:
-                               show_invalid_depstring_notice(pkg, _unicode(e))
+                               show_invalid_depstring_notice(pkg, str(e))
                                del e
                                required_sets['__excluded__'].add("=" + pkg.cpv)
 
@@ -989,14 +984,14 @@ def _calc_depclean(settings, trees, ldpath_mtimes,
                                # visible in the unevaluated form of the atom. 
In this
                                # case, we must display the unevaluated atom, 
so that
                                # the user can see the conditional USE deps 
that would
-                               # otherwise be invisible. Use 
Atom(_unicode(atom)) to
+                               # otherwise be invisible. Use Atom(str(atom)) to
                                # test for a package where this case would 
matter. This
                                # is not necessarily the same as 
atom.without_use,
-                               # since Atom(_unicode(atom)) may still contain 
some
+                               # since Atom(str(atom)) may still contain some
                                # USE dependencies that remain after evaluation 
of
                                # conditionals.
                                if atom.package and atom != 
atom.unevaluated_atom and \
-                                       vardb.match(Atom(_unicode(atom))):
+                                       vardb.match(Atom(str(atom))):
                                        msg.append("  %s (%s) pulled in by:" %
                                                (atom.unevaluated_atom, atom))
                                else:
@@ -1068,7 +1063,7 @@ def _calc_depclean(settings, trees, ldpath_mtimes,
                                key=operator.attrgetter('package'))
                        parent_strs.append("%s requires %s" %
                                (getattr(parent, "cpv", parent),
-                               ", ".join(_unicode(atom) for atom in atoms)))
+                               ", ".join(str(atom) for atom in atoms)))
                parent_strs.sort()
                msg = []
                msg.append("  %s pulled in by:\n" % (child_node.cpv,))
@@ -1541,7 +1536,7 @@ def action_deselect(settings, trees, opts, atoms):
 
                                writemsg_stdout(
                                        ">>> %s %s from \"%s\" favorites 
file...\n" %
-                                       (action_desc, colorize("INFORM", 
_unicode(atom)),
+                                       (action_desc, colorize("INFORM", 
str(atom)),
                                        filename), noiselevel=-1)
 
                        if '--ask' in opts:
diff --git a/lib/_emerge/create_world_atom.py b/lib/_emerge/create_world_atom.py
index a7f3e30bf..c4b8ccb69 100644
--- a/lib/_emerge/create_world_atom.py
+++ b/lib/_emerge/create_world_atom.py
@@ -6,10 +6,6 @@ import sys
 from portage.dep import Atom, _repo_separator
 from portage.exception import InvalidData
 
-if sys.hexversion >= 0x3000000:
-       _unicode = str
-else:
-       _unicode = unicode
 
 def create_world_atom(pkg, args_set, root_config, before_install=False):
        """Create a new atom for the world file if one does not exist.  If the
@@ -43,7 +39,7 @@ def create_world_atom(pkg, args_set, root_config, 
before_install=False):
        for cpv in portdb.match(Atom(cp)):
                for repo in repos:
                        try:
-                               
available_slots.add(portdb._pkg_str(_unicode(cpv), repo).slot)
+                               available_slots.add(portdb._pkg_str(str(cpv), 
repo).slot)
                        except (KeyError, InvalidData):
                                pass
 
@@ -98,7 +94,7 @@ def create_world_atom(pkg, args_set, root_config, 
before_install=False):
                                        for repo in repos:
                                                try:
                                                        matched_slots.add(
-                                                               
portdb._pkg_str(_unicode(cpv), repo).slot)
+                                                               
portdb._pkg_str(str(cpv), repo).slot)
                                                except (KeyError, InvalidData):
                                                        pass
 
diff --git a/lib/_emerge/depgraph.py b/lib/_emerge/depgraph.py
index ec90e59df..42ab5eaad 100644
--- a/lib/_emerge/depgraph.py
+++ b/lib/_emerge/depgraph.py
@@ -88,13 +88,6 @@ from _emerge.resolver.slot_collision import 
slot_conflict_handler
 from _emerge.resolver.circular_dependency import circular_dependency_handler
 from _emerge.resolver.output import Display, format_unmatched_atom
 
-if sys.hexversion >= 0x3000000:
-       basestring = str
-       long = int
-       _unicode = str
-else:
-       _unicode = unicode
-
 # Exposes a depgraph interface to dep_check.
 _dep_check_graph_interface = 
collections.namedtuple('_dep_check_graph_interface',(
        # Indicates a removal action, like depclean or prune.
@@ -311,7 +304,7 @@ class _rebuild_config(object):
                                                        ["BUILD_TIME"])
                                        except KeyError:
                                                continue
-                                       if bin_build_time != 
_unicode(parent.build_time):
+                                       if bin_build_time != 
str(parent.build_time):
                                                # 2) Remote binary package is 
valid, and local package
                                                #    is not up to date. Force 
reinstall.
                                                reinstall = True
@@ -5761,7 +5754,7 @@ class depgraph(object):
                                                other_installed, other_keys in 
dbs:
                                                try:
                                                        if 
portage.dep._match_slot(atom,
-                                                               
other_db._pkg_str(_unicode(cpv), None)):
+                                                               
other_db._pkg_str(str(cpv), None)):
                                                                slot_available 
= True
                                                                break
                                                except (KeyError, InvalidData):
@@ -9263,7 +9256,7 @@ class depgraph(object):
                                                filename = "world"
                                        writemsg_stdout(
                                                ">>> Recording %s in \"%s\" 
favorites file...\n" %
-                                               (colorize("INFORM", 
_unicode(a)), filename), noiselevel=-1)
+                                               (colorize("INFORM", str(a)), 
filename), noiselevel=-1)
                                world_set.update(all_added)
 
                if world_locked:
@@ -9458,7 +9451,7 @@ class depgraph(object):
                depgraph_sets = self._dynamic_config.sets[root_config.root]
                args = []
                for x in favorites:
-                       if not isinstance(x, basestring):
+                       if not isinstance(x, str):
                                continue
                        if x in ("system", "world"):
                                x = SETPREFIX + x
diff --git a/lib/_emerge/main.py b/lib/_emerge/main.py
index 95855ef2d..727e6d368 100644
--- a/lib/_emerge/main.py
+++ b/lib/_emerge/main.py
@@ -1,4 +1,4 @@
-# Copyright 1999-2019 Gentoo Authors
+# Copyright 1999-2020 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 from __future__ import print_function
@@ -22,8 +22,6 @@ portage.proxy.lazyimport.lazyimport(globals(),
 from portage import os
 from portage.sync import _SUBMODULE_PATH_MAP
 
-if sys.hexversion >= 0x3000000:
-       long = int
 
 options=[
 "--alphabetical",
diff --git a/lib/_emerge/resolver/output.py b/lib/_emerge/resolver/output.py
index ed88cc51f..f638d3557 100644
--- a/lib/_emerge/resolver/output.py
+++ b/lib/_emerge/resolver/output.py
@@ -1,4 +1,4 @@
-# Copyright 2010-2019 Gentoo Authors
+# Copyright 2010-2020 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 """Resolver output display operation.
@@ -34,12 +34,6 @@ from _emerge.resolver.output_helpers import ( 
_DisplayConfig, _tree_display,
        _PackageCounters, _create_use_string, _calc_changelog, PkgInfo)
 from _emerge.show_invalid_depstring_notice import show_invalid_depstring_notice
 
-if sys.hexversion >= 0x3000000:
-       basestring = str
-       _unicode = str
-else:
-       _unicode = unicode
-
 class Display(object):
        """Formats and outputs the depgrah supplied it for merge/re-merge, etc.
 
@@ -88,19 +82,19 @@ class Display(object):
                        addl = "%s     " % (colorize(self.blocker_style, "B"),)
                addl += self.empty_space_in_brackets()
                self.resolved = dep_expand(
-                       _unicode(blocker.atom).lstrip("!"), mydb=self.vardb,
+                       str(blocker.atom).lstrip("!"), mydb=self.vardb,
                        settings=self.pkgsettings
                        )
                if self.conf.columns and self.conf.quiet:
-                       addl += " " + colorize(self.blocker_style, 
_unicode(self.resolved))
+                       addl += " " + colorize(self.blocker_style, 
str(self.resolved))
                else:
                        addl = "[%s %s] %s%s" % \
                                (colorize(self.blocker_style, "blocks"),
                                addl, self.indent,
-                               colorize(self.blocker_style, 
_unicode(self.resolved))
+                               colorize(self.blocker_style, str(self.resolved))
                                )
                block_parents = self.conf.blocker_parents.parent_nodes(blocker)
-               block_parents = set(_unicode(pnode.cpv) for pnode in 
block_parents)
+               block_parents = set(str(pnode.cpv) for pnode in block_parents)
                block_parents = ", ".join(block_parents)
                if blocker.atom.blocker.overlap.forbid:
                        blocking_desc = "hard blocking"
@@ -109,7 +103,7 @@ class Display(object):
                if self.resolved != blocker.atom:
                        addl += colorize(self.blocker_style,
                                " (\"%s\" is %s %s)" %
-                               (_unicode(blocker.atom).lstrip("!"),
+                               (str(blocker.atom).lstrip("!"),
                                blocking_desc, block_parents))
                else:
                        addl += colorize(self.blocker_style,
@@ -316,7 +310,7 @@ class Display(object):
                                depstr, = db.aux_get(pkg.cpv,
                                        ["SRC_URI"], myrepo=pkg.repo)
                                show_invalid_depstring_notice(
-                                       pkg, _unicode(e))
+                                       pkg, str(e))
                                raise
                        except SignatureException:
                                # missing/invalid binary package SIZE signature
@@ -447,7 +441,7 @@ class Display(object):
                        ver_str = self._append_slot(ver_str, pkg, pkg_info)
                        ver_str = self._append_repository(ver_str, pkg, 
pkg_info)
                if self.conf.quiet:
-                       myprint = _unicode(pkg_info.attr_display) + " " + 
self.indent + \
+                       myprint = str(pkg_info.attr_display) + " " + 
self.indent + \
                                self.pkgprint(pkg_info.cp, pkg_info)
                        myprint = myprint+darkblue(" "+ver_str)+" "
                        myprint = myprint+pkg_info.oldbest
@@ -486,7 +480,7 @@ class Display(object):
                        ver_str = self._append_slot(ver_str, pkg, pkg_info)
                        ver_str = self._append_repository(ver_str, pkg, 
pkg_info)
                if self.conf.quiet:
-                       myprint = _unicode(pkg_info.attr_display) + " " + 
self.indent + \
+                       myprint = str(pkg_info.attr_display) + " " + 
self.indent + \
                                self.pkgprint(pkg_info.cp, pkg_info)
                        myprint = myprint+" "+green(ver_str)+" "
                        myprint = myprint+pkg_info.oldbest
@@ -543,7 +537,7 @@ class Display(object):
                @param show_repos: bool.
                """
                for msg in self.print_msg:
-                       if isinstance(msg, basestring):
+                       if isinstance(msg, str):
                                writemsg_stdout("%s\n" % (msg,), noiselevel=-1)
                                continue
                        myprint, self.verboseadd, repoadd = msg
diff --git a/lib/_emerge/resolver/output_helpers.py 
b/lib/_emerge/resolver/output_helpers.py
index b83717e93..8939663be 100644
--- a/lib/_emerge/resolver/output_helpers.py
+++ b/lib/_emerge/resolver/output_helpers.py
@@ -1,4 +1,4 @@
-# Copyright 2010-2014 Gentoo Foundation
+# Copyright 2010-2020 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 """Contains private support functions for the Display class
@@ -30,10 +30,6 @@ from _emerge.Blocker import Blocker
 from _emerge.Package import Package
 
 
-if sys.hexversion >= 0x3000000:
-       basestring = str
-
-
 class _RepoDisplay(object):
        def __init__(self, roots):
                self._shown_repos = {}
diff --git a/lib/_emerge/resolver/slot_collision.py 
b/lib/_emerge/resolver/slot_collision.py
index 682a3a0a5..9aa80e923 100644
--- a/lib/_emerge/resolver/slot_collision.py
+++ b/lib/_emerge/resolver/slot_collision.py
@@ -1,4 +1,4 @@
-# Copyright 2010-2014 Gentoo Foundation
+# Copyright 2010-2020 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 from __future__ import print_function, unicode_literals
@@ -16,8 +16,6 @@ from portage._sets.base import InternalPackageSet
 from portage.util import writemsg
 from portage.versions import cpv_getversion, vercmp
 
-if sys.hexversion >= 0x3000000:
-       basestring = str
 
 class slot_conflict_handler(object):
        """This class keeps track of all slot conflicts and provides
@@ -1125,7 +1123,7 @@ class _solution_candidate_generator(object):
                def __init__(self, value=None):
                        self.value = value
                def __eq__(self, other):
-                       if isinstance(other, basestring):
+                       if isinstance(other, str):
                                return self.value == other
                        else:
                                return self.value == other.value
diff --git a/lib/portage/__init__.py b/lib/portage/__init__.py
index 60dbea693..c7ba014fb 100644
--- a/lib/portage/__init__.py
+++ b/lib/portage/__init__.py
@@ -1,4 +1,4 @@
-# Copyright 1998-2019 Gentoo Authors
+# Copyright 1998-2020 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 from __future__ import unicode_literals
@@ -135,10 +135,6 @@ except ImportError as e:
        sys.stderr.write("    "+str(e)+"\n\n")
        raise
 
-if sys.hexversion >= 0x3000000:
-       # pylint: disable=W0622
-       basestring = str
-       long = int
 
 # We use utf_8 encoding everywhere. Previously, we used
 # sys.getfilesystemencoding() for the 'merge' encoding, but that had
@@ -478,7 +474,7 @@ def _eapi_is_deprecated(eapi):
        return eapi in _deprecated_eapis
 
 def eapi_is_supported(eapi):
-       if not isinstance(eapi, basestring):
+       if not isinstance(eapi, str):
                # Only call str() when necessary since with python2 it
                # can trigger UnicodeEncodeError if EAPI is corrupt.
                eapi = str(eapi)
@@ -619,10 +615,10 @@ if VERSION == 'HEAD':
                                                                head_timestamp 
= None
                                                                if 
len(output_lines) > 3:
                                                                        try:
-                                                                               
head_timestamp = long(output_lines[3])
+                                                                               
head_timestamp = int(output_lines[3])
                                                                        except 
ValueError:
                                                                                
pass
-                                                               timestamp = 
long(time.time())
+                                                               timestamp = 
int(time.time())
                                                                if 
head_timestamp is not None and timestamp > head_timestamp:
                                                                        
timestamp = timestamp - head_timestamp
                                                                if not 
patchlevel:
diff --git a/lib/portage/_emirrordist/MirrorDistTask.py 
b/lib/portage/_emirrordist/MirrorDistTask.py
index 8eb3081c6..c0cf30112 100644
--- a/lib/portage/_emirrordist/MirrorDistTask.py
+++ b/lib/portage/_emirrordist/MirrorDistTask.py
@@ -1,4 +1,4 @@
-# Copyright 2013-2018 Gentoo Foundation
+# Copyright 2013-2020 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 import errno
@@ -18,9 +18,6 @@ from _emerge.CompositeTask import CompositeTask
 from .FetchIterator import FetchIterator
 from .DeletionIterator import DeletionIterator
 
-if sys.hexversion >= 0x3000000:
-       # pylint: disable=W0622
-       long = int
 
 class MirrorDistTask(CompositeTask):
 
@@ -111,7 +108,7 @@ class MirrorDistTask(CompositeTask):
                                recycle_db[filename] = (st.st_size, start_time)
                        else:
                                r_size, r_time = value
-                               if long(r_size) != st.st_size:
+                               if int(r_size) != st.st_size:
                                        recycle_db[filename] = (st.st_size, 
start_time)
                                elif r_time + r_deletion_delay < start_time:
                                        if self._config.options.dry_run:
diff --git a/lib/portage/_emirrordist/main.py b/lib/portage/_emirrordist/main.py
index ce0c2929f..23f6468c5 100644
--- a/lib/portage/_emirrordist/main.py
+++ b/lib/portage/_emirrordist/main.py
@@ -1,4 +1,4 @@
-# Copyright 2013-2015 Gentoo Foundation
+# Copyright 2013-2020 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 import argparse
@@ -14,9 +14,6 @@ from portage.util._eventloop.global_event_loop import 
global_event_loop
 from .Config import Config
 from .MirrorDistTask import MirrorDistTask
 
-if sys.hexversion >= 0x3000000:
-       # pylint: disable=W0622
-       long = int
 
 seconds_per_day = 24 * 60 * 60
 
@@ -318,7 +315,7 @@ def emirrordist_main(args):
                        parser.error("--scheduled-deletion-log requires 
--deletion-db")
 
        if options.deletion_delay is not None:
-               options.deletion_delay = long(options.deletion_delay)
+               options.deletion_delay = int(options.deletion_delay)
                if options.deletion_db is None:
                        parser.error("--deletion-delay requires --deletion-db")
 
@@ -391,7 +388,7 @@ def emirrordist_main(args):
 
        if options.recycle_deletion_delay is not None:
                options.recycle_deletion_delay = \
-                       long(options.recycle_deletion_delay)
+                       int(options.recycle_deletion_delay)
 
        if options.fetch_log_dir is not None:
                options.fetch_log_dir = normalize_path(
diff --git a/lib/portage/_sets/base.py b/lib/portage/_sets/base.py
index aba295602..4d0a42179 100644
--- a/lib/portage/_sets/base.py
+++ b/lib/portage/_sets/base.py
@@ -1,4 +1,4 @@
-# Copyright 2007-2018 Gentoo Foundation
+# Copyright 2007-2020 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 import sys
@@ -6,9 +6,6 @@ from portage.dep import Atom, ExtendedAtomDict, 
best_match_to_list, match_from_l
 from portage.exception import InvalidAtom
 from portage.versions import cpv_getkey
 
-if sys.hexversion >= 0x3000000:
-       # pylint: disable=W0622
-       basestring = str
 
 OPERATIONS = ["merge", "unmerge"]
 
@@ -74,7 +71,7 @@ class PackageSet(object):
                self._nonatoms.clear()
                for a in atoms:
                        if not isinstance(a, Atom):
-                               if isinstance(a, basestring):
+                               if isinstance(a, str):
                                        a = a.strip()
                                if not a:
                                        continue
diff --git a/lib/portage/cache/flat_hash.py b/lib/portage/cache/flat_hash.py
index 451ea9e51..4d517143d 100644
--- a/lib/portage/cache/flat_hash.py
+++ b/lib/portage/cache/flat_hash.py
@@ -1,4 +1,4 @@
-# Copyright 2005-2019 Gentoo Authors
+# Copyright 2005-2020 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 # Author(s): Brian Harring (ferri...@gentoo.org)
 
@@ -18,9 +18,6 @@ from portage import _unicode_encode
 from portage.exception import InvalidData
 from portage.versions import _pkg_str
 
-if sys.hexversion >= 0x3000000:
-       # pylint: disable=W0622
-       long = int
 
 class database(fs_template.FsBased):
 
diff --git a/lib/portage/cache/fs_template.py b/lib/portage/cache/fs_template.py
index e3c3c12c2..7d6ff2bbe 100644
--- a/lib/portage/cache/fs_template.py
+++ b/lib/portage/cache/fs_template.py
@@ -1,4 +1,4 @@
-# Copyright 2005-2014 Gentoo Foundation
+# Copyright 2005-2020 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 # Author(s): Brian Harring (ferri...@gentoo.org)
 
@@ -14,9 +14,6 @@ lazyimport(globals(),
 )
 del lazyimport
 
-if sys.hexversion >= 0x3000000:
-       # pylint: disable=W0622
-       long = int
 
 class FsBased(template.database):
        """template wrapping fs needed options, and providing _ensure_access as 
a way to 
@@ -44,7 +41,7 @@ class FsBased(template.database):
                try:
                        apply_permissions(path, gid=self._gid, mode=self._perms)
                        if mtime != -1:
-                               mtime=long(mtime)
+                               mtime=int(mtime)
                                os.utime(path, (mtime, mtime))
                except (PortageException, EnvironmentError):
                        return False
diff --git a/lib/portage/cache/index/pkg_desc_index.py 
b/lib/portage/cache/index/pkg_desc_index.py
index dbcbb8313..fa9287fe6 100644
--- a/lib/portage/cache/index/pkg_desc_index.py
+++ b/lib/portage/cache/index/pkg_desc_index.py
@@ -1,4 +1,4 @@
-# Copyright 2014 Gentoo Foundation
+# Copyright 2014-2020 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 from __future__ import unicode_literals
@@ -8,15 +8,11 @@ import sys
 
 from portage.versions import _pkg_str
 
-if sys.hexversion >= 0x3000000:
-       _unicode = str
-else:
-       _unicode = unicode
 
 pkg_desc_index_node = collections.namedtuple("pkg_desc_index_node",
        ["cp", "cpv_list", "desc"])
 
-class pkg_node(_unicode):
+class pkg_node(str):
        """
        A minimal package node class. For performance reasons, inputs
        are not validated.
@@ -29,7 +25,7 @@ class pkg_node(_unicode):
                self.__dict__['build_time'] = None
 
        def __new__(cls, cp, version, repo=None):
-               return _unicode.__new__(cls, cp + "-" + version)
+               return str.__new__(cls, cp + "-" + version)
 
        def __setattr__(self, name, value):
                raise AttributeError("pkg_node instances are immutable",
diff --git a/lib/portage/cache/metadata.py b/lib/portage/cache/metadata.py
index 45a057d08..b3daec274 100644
--- a/lib/portage/cache/metadata.py
+++ b/lib/portage/cache/metadata.py
@@ -1,4 +1,4 @@
-# Copyright 2005-2018 Gentoo Foundation
+# Copyright 2005-2020 Gentoo Authors
 # Author(s): Brian Harring (ferri...@gentoo.org)
 # License: GPL2
 
@@ -15,10 +15,6 @@ import portage.eclass_cache
 from portage.cache.template import reconstruct_eclasses
 from portage.cache.mappings import ProtectedDict
 
-if sys.hexversion >= 0x3000000:
-       # pylint: disable=W0622
-       basestring = str
-       long = int
 
 # this is the old cache format, flat_list.  count maintained here.
 magic_line_count = 22
@@ -76,7 +72,7 @@ class database(flat_hash.database):
                                        raise cache_errors.CacheCorruption(cpv, 
e)
                        else:
                                d["_eclasses_"] = {}
-               elif isinstance(d["_eclasses_"], basestring):
+               elif isinstance(d["_eclasses_"], str):
                        # We skip this if flat_hash.database._parse_data() was 
called above
                        # because it calls reconstruct_eclasses() internally.
                        d["_eclasses_"] = reconstruct_eclasses(None, 
d["_eclasses_"])
diff --git a/lib/portage/cache/sqlite.py b/lib/portage/cache/sqlite.py
index 69150f679..5be5d6dd0 100644
--- a/lib/portage/cache/sqlite.py
+++ b/lib/portage/cache/sqlite.py
@@ -1,4 +1,4 @@
-# Copyright 1999-2014 Gentoo Foundation
+# Copyright 1999-2020 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 from __future__ import division, unicode_literals
@@ -12,9 +12,6 @@ from portage import _unicode_decode
 from portage.util import writemsg
 from portage.localization import _
 
-if sys.hexversion >= 0x3000000:
-       # pylint: disable=W0622
-       basestring = str
 
 class database(fs_template.FsBased):
 
@@ -64,7 +61,7 @@ class database(fs_template.FsBased):
 
        def _db_escape_string(self, s):
                """meta escaping, returns quoted string for use in sql 
statements"""
-               if not isinstance(s, basestring):
+               if not isinstance(s, str):
                        # Avoid potential UnicodeEncodeError in python-2.x by
                        # only calling str() when it's absolutely necessary.
                        s = str(s)
diff --git a/lib/portage/cache/template.py b/lib/portage/cache/template.py
index 6b4878347..d7fff3e32 100644
--- a/lib/portage/cache/template.py
+++ b/lib/portage/cache/template.py
@@ -1,4 +1,4 @@
-# Copyright 2005-2014 Gentoo Foundation
+# Copyright 2005-2020 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 # Author(s): Brian Harring (ferri...@gentoo.org)
 
@@ -9,13 +9,6 @@ import sys
 import warnings
 import operator
 
-if sys.hexversion >= 0x3000000:
-       # pylint: disable=W0622
-       _unicode = str
-       basestring = str
-       long = int
-else:
-       _unicode = unicode
 
 class database(object):
        # this is for metadata/cache transfer.
@@ -94,10 +87,10 @@ class database(object):
                        d.pop('_mtime_', None)
                else:
                        try:
-                               mtime = long(mtime)
+                               mtime = int(mtime)
                        except ValueError:
                                raise cache_errors.CacheCorruption(cpv,
-                                       '_mtime_ conversion to long failed: %s' 
% (mtime,))
+                                       '_mtime_ conversion to int failed: %s' 
% (mtime,))
                        d['_mtime_'] = mtime
                return d
 
@@ -278,7 +271,7 @@ class database(object):
                for key,match in match_dict.items():
                        # XXX this sucks.
                        try:
-                               if isinstance(match, basestring):
+                               if isinstance(match, str):
                                        restricts[key] = re.compile(match).match
                                else:
                                        restricts[key] = 
re.compile(match[0],match[1]).match
@@ -306,7 +299,7 @@ _keysorter = operator.itemgetter(0)
 def serialize_eclasses(eclass_dict, chf_type='mtime', paths=True):
        """takes a dict, returns a string representing said dict"""
        """The "new format", which causes older versions of <portage-2.1.2 to
-       traceback with a ValueError due to failed long() conversion.  This 
format
+       traceback with a ValueError due to failed int() conversion.  This format
        isn't currently written, but the the capability to read it is already 
built
        in.
        return "\t".join(["%s\t%s" % (k, str(v)) \
@@ -335,7 +328,7 @@ def _md5_deserializer(md5):
 
 _chf_deserializers = {
        'md5': _md5_deserializer,
-       'mtime': long,
+       'mtime': int,
 }
 
 
diff --git a/lib/portage/cvstree.py b/lib/portage/cvstree.py
index 87bbed8bb..808939d61 100644
--- a/lib/portage/cvstree.py
+++ b/lib/portage/cvstree.py
@@ -14,9 +14,6 @@ from portage import os
 from portage import _encodings
 from portage import _unicode_encode
 
-if sys.hexversion >= 0x3000000:
-       # pylint: disable=W0622
-       long = int
 
 # [D]/Name/Version/Date/Flags/Tags
 
diff --git a/lib/portage/dbapi/bintree.py b/lib/portage/dbapi/bintree.py
index 311c9a78a..ab8e65b62 100644
--- a/lib/portage/dbapi/bintree.py
+++ b/lib/portage/dbapi/bintree.py
@@ -1,4 +1,4 @@
-# Copyright 1998-2019 Gentoo Authors
+# Copyright 1998-2020 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 from __future__ import unicode_literals
@@ -59,13 +59,6 @@ try:
 except ImportError:
        from urlparse import urlparse
 
-if sys.hexversion >= 0x3000000:
-       # pylint: disable=W0622
-       _unicode = str
-       basestring = str
-       long = int
-else:
-       _unicode = unicode
 
 class UseCachedCopyOfRemoteIndex(Exception):
        # If the local copy is recent enough
@@ -166,9 +159,9 @@ class bindbapi(fakedbapi):
                        metadata_bytes = portage.xpak.tbz2(tbz2_path).get_data()
                        def getitem(k):
                                if k == "_mtime_":
-                                       return _unicode(st[stat.ST_MTIME])
+                                       return str(st[stat.ST_MTIME])
                                elif k == "SIZE":
-                                       return _unicode(st.st_size)
+                                       return str(st.st_size)
                                v = metadata_bytes.get(_unicode_encode(k,
                                        encoding=_encodings['repo.content'],
                                        errors='backslashreplace'))
@@ -470,7 +463,7 @@ class binarytree(object):
                # sanity check
                for atom in (origcp, newcp):
                        if not isjustname(atom):
-                               raise InvalidPackageName(_unicode(atom))
+                               raise InvalidPackageName(str(atom))
                mynewcat = catsplit(newcp)[0]
                origmatches=self.dbapi.cp_list(origcp)
                moves = 0
@@ -494,7 +487,7 @@ class binarytree(object):
                        if not isvalidatom(newcp, eapi=mycpv.eapi):
                                continue
 
-                       mynewcpv = mycpv.replace(mycpv_cp, _unicode(newcp), 1)
+                       mynewcpv = mycpv.replace(mycpv_cp, str(newcp), 1)
                        myoldpkg = catsplit(mycpv)[1]
                        mynewpkg = catsplit(mynewcpv)[1]
 
@@ -727,12 +720,12 @@ class binarytree(object):
                                                match = None
                                                for d in possibilities:
                                                        try:
-                                                               if 
long(d["_mtime_"]) != s[stat.ST_MTIME]:
+                                                               if 
int(d["_mtime_"]) != s[stat.ST_MTIME]:
                                                                        continue
                                                        except (KeyError, 
ValueError):
                                                                continue
                                                        try:
-                                                               if 
long(d["SIZE"]) != long(s.st_size):
+                                                               if 
int(d["SIZE"]) != int(s.st_size):
                                                                        continue
                                                        except (KeyError, 
ValueError):
                                                                continue
@@ -819,7 +812,7 @@ class binarytree(object):
 
                                        if pkg_metadata.get("BUILD_ID"):
                                                try:
-                                                       build_id = 
long(pkg_metadata["BUILD_ID"])
+                                                       build_id = 
int(pkg_metadata["BUILD_ID"])
                                                except ValueError:
                                                        writemsg(_("!!! Binary 
package has "
                                                                "invalid 
BUILD_ID: '%s'\n") %
@@ -849,8 +842,8 @@ class binarytree(object):
                                                        noiselevel=-1)
                                                continue
                                        if build_id is not None:
-                                               pkg_metadata["BUILD_ID"] = 
_unicode(build_id)
-                                       pkg_metadata["SIZE"] = 
_unicode(s.st_size)
+                                               pkg_metadata["BUILD_ID"] = 
str(build_id)
+                                       pkg_metadata["SIZE"] = str(s.st_size)
                                        # Discard items used only for 
validation above.
                                        pkg_metadata.pop("CATEGORY")
                                        pkg_metadata.pop("PF")
@@ -864,13 +857,13 @@ class binarytree(object):
                                                pkgindex._pkg_slot_dict())
                                        if d:
                                                try:
-                                                       if long(d["_mtime_"]) 
!= s[stat.ST_MTIME]:
+                                                       if int(d["_mtime_"]) != 
s[stat.ST_MTIME]:
                                                                d.clear()
                                                except (KeyError, ValueError):
                                                        d.clear()
                                        if d:
                                                try:
-                                                       if long(d["SIZE"]) != 
long(s.st_size):
+                                                       if int(d["SIZE"]) != 
int(s.st_size):
                                                                d.clear()
                                                except (KeyError, ValueError):
                                                        d.clear()
@@ -1096,12 +1089,12 @@ class binarytree(object):
                                writemsg(_("\n\n!!! Error fetching binhost 
package" \
                                        " info from '%s'\n") % 
_hide_url_passwd(base_url))
                                # With Python 2, the EnvironmentError message 
may
-                               # contain bytes or unicode, so use _unicode to 
ensure
+                               # contain bytes or unicode, so use str to ensure
                                # safety with all locales (bug #532784).
                                try:
-                                       error_msg = _unicode(e)
+                                       error_msg = str(e)
                                except UnicodeDecodeError as uerror:
-                                       error_msg = _unicode(uerror.object,
+                                       error_msg = str(uerror.object,
                                                encoding='utf_8', 
errors='replace')
                                writemsg("!!! %s\n\n" % error_msg)
                                del e
@@ -1244,7 +1237,7 @@ class binarytree(object):
                                # attributes, so that we can later distinguish 
that it
                                # is identical to its remote counterpart.
                                build_id = self._parse_build_id(basename)
-                               metadata["BUILD_ID"] = _unicode(build_id)
+                               metadata["BUILD_ID"] = str(build_id)
                                cpv = _pkg_str(cpv, metadata=metadata,
                                        settings=self.settings, db=self.dbapi)
                                binpkg = portage.xpak.tbz2(full_path)
@@ -1296,9 +1289,9 @@ class binarytree(object):
                binary_metadata = portage.xpak.tbz2(filename).get_data()
                for k in keys:
                        if k == "_mtime_":
-                               metadata[k] = _unicode(st[stat.ST_MTIME])
+                               metadata[k] = str(st[stat.ST_MTIME])
                        elif k == "SIZE":
-                               metadata[k] = _unicode(st.st_size)
+                               metadata[k] = str(st.st_size)
                        else:
                                v = binary_metadata.get(_unicode_encode(k))
                                if v is None:
@@ -1356,7 +1349,7 @@ class binarytree(object):
                contents = 
codecs.getwriter(_encodings['repo.content'])(io.BytesIO())
                pkgindex.write(contents)
                contents = contents.getvalue()
-               atime = mtime = long(pkgindex.header["TIMESTAMP"])
+               atime = mtime = int(pkgindex.header["TIMESTAMP"])
                output_files = [(atomic_ofstream(self._pkgindex_file, 
mode="wb"),
                        self._pkgindex_file, None)]
 
@@ -1391,8 +1384,8 @@ class binarytree(object):
 
                d["CPV"] = cpv
                st = os.lstat(pkg_path)
-               d["_mtime_"] = _unicode(st[stat.ST_MTIME])
-               d["SIZE"] = _unicode(st.st_size)
+               d["_mtime_"] = str(st[stat.ST_MTIME])
+               d["SIZE"] = str(st.st_size)
 
                rel_path = pkg_path[len(self.pkgdir)+1:]
                # record location if it's non-default
@@ -1471,7 +1464,7 @@ class binarytree(object):
                """
                if not (self.settings.profile_path and
                        "IUSE_IMPLICIT" in self.settings):
-                       header.setdefault("VERSION", 
_unicode(self._pkgindex_version))
+                       header.setdefault("VERSION", 
str(self._pkgindex_version))
                        return
 
                portdir = 
normalize_path(os.path.realpath(self.settings["PORTDIR"]))
@@ -1482,7 +1475,7 @@ class binarytree(object):
                        if profile_path.startswith(profiles_base):
                                profile_path = profile_path[len(profiles_base):]
                        header["PROFILE"] = profile_path
-               header["VERSION"] = _unicode(self._pkgindex_version)
+               header["VERSION"] = str(self._pkgindex_version)
                base_uri = self.settings.get("PORTAGE_BINHOST_HEADER_URI")
                if base_uri:
                        header["URI"] = base_uri
@@ -1657,7 +1650,7 @@ class binarytree(object):
                if hyphen != -1:
                        build_id = filename[hyphen+1:-suffixlen]
                try:
-                       build_id = long(build_id)
+                       build_id = int(build_id)
                except ValueError:
                        pass
                return build_id
diff --git a/lib/portage/dbapi/porttree.py b/lib/portage/dbapi/porttree.py
index ed992d1e2..e1ec2a3f1 100644
--- a/lib/portage/dbapi/porttree.py
+++ b/lib/portage/dbapi/porttree.py
@@ -55,10 +55,6 @@ try:
 except ImportError:
        from urlparse import urlparse
 
-if sys.hexversion >= 0x3000000:
-       # pylint: disable=W0622
-       basestring = str
-       long = int
 
 def close_portdbapi_caches():
        # The python interpreter does _not_ guarantee that destructors are
@@ -999,7 +995,7 @@ class portdbapi(dbapi):
                # stable sort by version produces results ordered by
                # (pkg.version, repo.priority).
                if mytree is not None:
-                       if isinstance(mytree, basestring):
+                       if isinstance(mytree, str):
                                repos = 
[self.repositories.get_repo_for_location(mytree)]
                        else:
                                # assume it's iterable
diff --git a/lib/portage/dbapi/vartree.py b/lib/portage/dbapi/vartree.py
index 80ca0ab80..9e173449e 100644
--- a/lib/portage/dbapi/vartree.py
+++ b/lib/portage/dbapi/vartree.py
@@ -107,13 +107,6 @@ try:
 except ImportError:
        import pickle
 
-if sys.hexversion >= 0x3000000:
-       # pylint: disable=W0622
-       basestring = str
-       long = int
-       _unicode = str
-else:
-       _unicode = unicode
 
 class vardbapi(dbapi):
 
@@ -351,7 +344,7 @@ class vardbapi(dbapi):
        def cpv_counter(self, mycpv):
                "This method will grab the COUNTER. Returns a counter value."
                try:
-                       return long(self.aux_get(mycpv, ["COUNTER"])[0])
+                       return int(self.aux_get(mycpv, ["COUNTER"])[0])
                except (KeyError, ValueError):
                        pass
                writemsg_level(_("portage: COUNTER for %s was corrupted; " \
@@ -404,7 +397,7 @@ class vardbapi(dbapi):
                        if not isvalidatom(newcp, eapi=mycpv.eapi):
                                continue
 
-                       mynewcpv = mycpv.replace(mycpv_cp, _unicode(newcp), 1)
+                       mynewcpv = mycpv.replace(mycpv_cp, str(newcp), 1)
                        mynewcat = catsplit(newcp)[0]
                        origpath = self.getpath(mycpv)
                        if not os.path.exists(origpath):
@@ -759,7 +752,7 @@ class vardbapi(dbapi):
                                pkg_data = None
                        else:
                                cache_mtime, metadata = pkg_data
-                               if not isinstance(cache_mtime, (float, long, 
int)) or \
+                               if not isinstance(cache_mtime, (float, int)) or 
\
                                        not isinstance(metadata, dict):
                                        pkg_data = None
 
@@ -771,7 +764,7 @@ class vardbapi(dbapi):
 
                                # Handle truncated mtime in order to avoid cache
                                # invalidation for livecd squashfs (bug 564222).
-                               elif long(cache_mtime) == mydir_stat.st_mtime:
+                               elif int(cache_mtime) == mydir_stat.st_mtime:
                                        cache_valid = True
                        else:
                                # Cache may contain integer mtime.
@@ -796,7 +789,7 @@ class vardbapi(dbapi):
                                        cache_data.update(metadata)
                                for aux_key in cache_these:
                                        cache_data[aux_key] = mydata[aux_key]
-                               self._aux_cache["packages"][_unicode(mycpv)] = \
+                               self._aux_cache["packages"][str(mycpv)] = \
                                        (mydir_mtime, cache_data)
                                self._aux_cache["modified"].add(mycpv)
 
@@ -1090,7 +1083,7 @@ class vardbapi(dbapi):
                                mode='r', encoding=_encodings['repo.content'],
                                errors='replace') as f:
                                try:
-                                       counter = long(f.readline().strip())
+                                       counter = int(f.readline().strip())
                                except (OverflowError, ValueError) as e:
                                        writemsg(_("!!! COUNTER file is 
corrupt: '%s'\n") %
                                                self._counter_path, 
noiselevel=-1)
@@ -1249,7 +1242,7 @@ class vardbapi(dbapi):
                if new_needed is not None:
                        f = atomic_ofstream(os.path.join(pkg.dbdir, 
LinkageMap._needed_aux_key))
                        for entry in new_needed:
-                               f.write(_unicode(entry))
+                               f.write(str(entry))
                        f.close()
                f = atomic_ofstream(os.path.join(pkg.dbdir, "CONTENTS"))
                write_contents(new_contents, root, f)
@@ -1321,7 +1314,7 @@ class vardbapi(dbapi):
                                counter = int(counter)
                        except ValueError:
                                counter = 0
-                       return (_unicode(cpv), counter, mtime)
+                       return (str(cpv), counter, mtime)
 
        class _owners_db(object):
 
@@ -1450,7 +1443,7 @@ class vardbapi(dbapi):
                                                                len(hash_value) 
!= 3:
                                                                continue
                                                        cpv, counter, mtime = 
hash_value
-                                                       if not isinstance(cpv, 
basestring):
+                                                       if not isinstance(cpv, 
str):
                                                                continue
                                                        try:
                                                                current_hash = 
hash_pkg(cpv)
@@ -3890,7 +3883,7 @@ class dblink(object):
                        for phase, messages in logentries.items():
                                for key, lines in messages:
                                        funcname = funcnames[key]
-                                       if isinstance(lines, basestring):
+                                       if isinstance(lines, str):
                                                lines = [lines]
                                        for line in lines:
                                                for line in line.split('\n'):
@@ -4908,7 +4901,7 @@ class dblink(object):
                        self._installed_instance is not None
 
                # this is supposed to merge a list of files.  There will be 2 
forms of argument passing.
-               if isinstance(stufftomerge, basestring):
+               if isinstance(stufftomerge, str):
                        #A directory is specified.  Figure out protection 
paths, listdir() it and process it.
                        mergelist = [join(stufftomerge, child) for child in \
                                os.listdir(join(srcroot, stufftomerge))]
@@ -5447,7 +5440,7 @@ class dblink(object):
 
        def setfile(self,fname,data):
                kwargs = {}
-               if fname == 'environment.bz2' or not isinstance(data, 
basestring):
+               if fname == 'environment.bz2' or not isinstance(data, str):
                        kwargs['mode'] = 'wb'
                else:
                        kwargs['mode'] = 'w'
@@ -5504,7 +5497,7 @@ class dblink(object):
 
                build_time = backup_dblink.getfile('BUILD_TIME')
                try:
-                       build_time = long(build_time.strip())
+                       build_time = int(build_time.strip())
                except ValueError:
                        build_time = 0
 
diff --git a/lib/portage/dep/__init__.py b/lib/portage/dep/__init__.py
index 314338f7c..f1894bb3f 100644
--- a/lib/portage/dep/__init__.py
+++ b/lib/portage/dep/__init__.py
@@ -32,12 +32,6 @@ from portage.versions import _cp, _cpv, _pkg_str, _slot, 
_unknown_repo, _vr, \
        catpkgsplit, vercmp, ververify
 import portage.cache.mappings
 
-if sys.hexversion >= 0x3000000:
-       # pylint: disable=W0622
-       basestring = str
-       _unicode = str
-else:
-       _unicode = unicode
 
 # \w is [a-zA-Z0-9_]
 
@@ -354,7 +348,7 @@ class paren_normalize(list):
                        return dest
                i = iter(src)
                for x in i:
-                       if isinstance(x, basestring):
+                       if isinstance(x, str):
                                if x in ('||', '^^'):
                                        y = self._zap_parens(next(i), [], 
disjunction=True)
                                        if len(y) == 1:
@@ -559,13 +553,12 @@ def _use_reduce_cached(depstr, uselist, masklist, 
matchall, excludeall, \
                                                stack[level].extend(l)
                                        continue
 
-                               if stack[level] and isinstance(stack[level][-1],
-                                       basestring):
+                               if stack[level] and 
isinstance(stack[level][-1], str):
                                        if stack[level][-1] == "||" and not l:
                                                #Optimize: || ( ) -> .
                                                if not 
eapi_attrs.empty_groups_always_true:
                                                        # in EAPI 7+, we need 
to fail here
-                                                       l.append((token_class 
or _unicode)("__const__/empty-any-of"))
+                                                       l.append((token_class 
or str)("__const__/empty-any-of"))
                                                stack[level].pop()
                                        elif stack[level][-1][-1] == "?":
                                                #The last token before the '(' 
that matches the current ')'
@@ -588,8 +581,7 @@ def _use_reduce_cached(depstr, uselist, masklist, matchall, 
excludeall, \
                                        #ends in a non-operator. This is almost 
equivalent to stack[level][-1]=="||",
                                        #expect that it skips empty levels.
                                        while k>=0:
-                                               if stack[k] and 
isinstance(stack[k][-1],
-                                                       basestring):
+                                               if stack[k] and 
isinstance(stack[k][-1], str):
                                                        if stack[k][-1] == "||":
                                                                return k
                                                        elif stack[k][-1][-1] 
!= "?":
@@ -1230,7 +1222,7 @@ class _use_dep(object):
                return _use_dep(tokens, self._eapi_attrs, 
enabled_flags=enabled_flags, disabled_flags=disabled_flags,
                        missing_enabled=missing_enabled, 
missing_disabled=missing_disabled, required=self.required)
 
-class Atom(_unicode):
+class Atom(str):
 
        """
        For compatibility with existing atom string manipulation code, this
@@ -1257,7 +1249,7 @@ class Atom(_unicode):
 
        def __new__(cls, s, unevaluated_atom=None, allow_wildcard=False, 
allow_repo=None,
                _use=None, eapi=None, is_valid_flag=None, allow_build_id=None):
-               return _unicode.__new__(cls, s)
+               return str.__new__(cls, s)
 
        def __init__(self, s, unevaluated_atom=None, allow_wildcard=False, 
allow_repo=None,
                _use=None, eapi=None, is_valid_flag=None, allow_build_id=None):
@@ -1265,13 +1257,13 @@ class Atom(_unicode):
                        # This is an efficiency assertion, to ensure that the 
Atom
                        # constructor is not called redundantly.
                        raise TypeError(_("Expected %s, got %s") % \
-                               (_unicode, type(s)))
+                               (str, type(s)))
 
-               if not isinstance(s, _unicode):
-                       # Avoid TypeError from _unicode.__init__ with PyPy.
+               if not isinstance(s, str):
+                       # Avoid TypeError from str.__init__ with PyPy.
                        s = _unicode_decode(s)
 
-               _unicode.__init__(s)
+               str.__init__(s)
 
                eapi_attrs = _get_eapi_attrs(eapi)
                atom_re = _get_atom_re(eapi_attrs)
@@ -1438,7 +1430,7 @@ class Atom(_unicode):
                                unevaluated_atom.use is not None:
                                # unevaluated_atom.use is used for IUSE checks 
when matching
                                # packages, so it must not propagate to 
without_use
-                               without_use = Atom(_unicode(self),
+                               without_use = Atom(str(self),
                                        allow_wildcard=allow_wildcard,
                                        allow_repo=allow_repo,
                                        eapi=eapi)
@@ -1454,9 +1446,9 @@ class Atom(_unicode):
                        self.__dict__['unevaluated_atom'] = self
 
                if eapi is not None:
-                       if not isinstance(eapi, basestring):
+                       if not isinstance(eapi, str):
                                raise TypeError('expected eapi argument of ' + \
-                                       '%s, got %s: %s' % (basestring, 
type(eapi), eapi,))
+                                       '%s, got %s: %s' % (str, type(eapi), 
eapi,))
                        if self.slot and not eapi_attrs.slot_deps:
                                raise InvalidAtom(
                                        _("Slot deps are not allowed in EAPI 
%s: '%s'") \
@@ -1518,7 +1510,7 @@ class Atom(_unicode):
                if self.repo is not None:
                        atom += _repo_separator + self.repo
                if self.use is not None:
-                       atom += _unicode(self.use)
+                       atom += str(self.use)
                return Atom(atom,
                        allow_repo=True, allow_wildcard=True)
 
@@ -1534,7 +1526,7 @@ class Atom(_unicode):
                                atom += self.slot_operator
                atom += _repo_separator + repo
                if self.use is not None:
-                       atom += _unicode(self.use)
+                       atom += str(self.use)
                return Atom(atom, allow_repo=True, allow_wildcard=True)
 
        def with_slot(self, slot):
@@ -1542,7 +1534,7 @@ class Atom(_unicode):
                if self.repo is not None:
                        atom += _repo_separator + self.repo
                if self.use is not None:
-                       atom += _unicode(self.use)
+                       atom += str(self.use)
                return Atom(atom, allow_repo=True, allow_wildcard=True)
 
        def __setattr__(self, name, value):
@@ -1600,7 +1592,7 @@ class Atom(_unicode):
                        if self.slot_operator is not None:
                                atom += self.slot_operator
                use_dep = self.use.evaluate_conditionals(use)
-               atom += _unicode(use_dep)
+               atom += str(use_dep)
                return Atom(atom, unevaluated_atom=self, allow_repo=(self.repo 
is not None), _use=use_dep)
 
        def violated_conditionals(self, other_use, is_valid_flag, 
parent_use=None):
@@ -1628,7 +1620,7 @@ class Atom(_unicode):
                        if self.slot_operator is not None:
                                atom += self.slot_operator
                use_dep = self.use.violated_conditionals(other_use, 
is_valid_flag, parent_use)
-               atom += _unicode(use_dep)
+               atom += str(use_dep)
                return Atom(atom, unevaluated_atom=self, allow_repo=(self.repo 
is not None), _use=use_dep)
 
        def _eval_qa_conditionals(self, use_mask, use_force):
@@ -1644,7 +1636,7 @@ class Atom(_unicode):
                        if self.slot_operator is not None:
                                atom += self.slot_operator
                use_dep = self.use._eval_qa_conditionals(use_mask, use_force)
-               atom += _unicode(use_dep)
+               atom += str(use_dep)
                return Atom(atom, unevaluated_atom=self, allow_repo=(self.repo 
is not None), _use=use_dep)
 
        def __copy__(self):
@@ -1740,7 +1732,7 @@ class 
ExtendedAtomDict(portage.cache.mappings.MutableMapping):
 
        def __getitem__(self, cp):
 
-               if not isinstance(cp, basestring):
+               if not isinstance(cp, str):
                        raise KeyError(cp)
 
                if '*' in cp:
@@ -1982,7 +1974,7 @@ def isvalidatom(atom, allow_blockers=False, 
allow_wildcard=False,
 
        if eapi is not None and isinstance(atom, Atom) and atom.eapi != eapi:
                # We'll construct a new atom with the given eapi.
-               atom = _unicode(atom)
+               atom = str(atom)
 
        try:
                if not isinstance(atom, Atom):
diff --git a/lib/portage/eclass_cache.py b/lib/portage/eclass_cache.py
index d2d9e2710..9daa6e34a 100644
--- a/lib/portage/eclass_cache.py
+++ b/lib/portage/eclass_cache.py
@@ -1,4 +1,4 @@
-# Copyright 2005-2014 Gentoo Foundation
+# Copyright 2005-2020 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 # Author(s): Nicholas Carpaski (carpa...@gentoo.org), Brian Harring 
(ferri...@gentoo.org)
 
@@ -17,10 +17,6 @@ from portage import os
 from portage import checksum
 from portage import _shell_quote
 
-if sys.hexversion >= 0x3000000:
-       # pylint: disable=W0622
-       long = int
-
 
 class hashed_path(object):
 
@@ -30,11 +26,11 @@ class hashed_path(object):
        def __getattr__(self, attr):
                if attr == 'mtime':
                        # use stat.ST_MTIME; accessing .st_mtime gets you a 
float
-                       # depending on the python version, and long(float) 
introduces
+                       # depending on the python version, and int(float) 
introduces
                        # some rounding issues that aren't present for people 
using
                        # the straight c api.
                        # thus use the defacto python compatibility work around;
-                       # access via index, which guarantees you get the raw 
long.
+                       # access via index, which guarantees you get the raw 
int.
                        try:
                                self.mtime = obj = 
os.stat(self.location)[stat.ST_MTIME]
                        except OSError as e:
diff --git a/lib/portage/elog/__init__.py b/lib/portage/elog/__init__.py
index cc086123f..e196a771d 100644
--- a/lib/portage/elog/__init__.py
+++ b/lib/portage/elog/__init__.py
@@ -3,9 +3,6 @@
 # Distributed under the terms of the GNU General Public License v2
 
 import sys
-if sys.hexversion >= 0x3000000:
-       # pylint: disable=W0622
-       basestring = str
 
 import portage
 portage.proxy.lazyimport.lazyimport(globals(),
@@ -58,7 +55,7 @@ def _combine_logentries(logentries):
                        if previous_type != msgtype:
                                previous_type = msgtype
                                rValue.append("%s: %s" % (msgtype, phase))
-                       if isinstance(msgcontent, basestring):
+                       if isinstance(msgcontent, str):
                                rValue.append(msgcontent.rstrip("\n"))
                        else:
                                for line in msgcontent:
diff --git a/lib/portage/elog/mod_echo.py b/lib/portage/elog/mod_echo.py
index 8cdf6ac7d..52e8fad8d 100644
--- a/lib/portage/elog/mod_echo.py
+++ b/lib/portage/elog/mod_echo.py
@@ -9,9 +9,6 @@ from portage.output import EOutput, colorize
 from portage.const import EBUILD_PHASES
 from portage.localization import _
 
-if sys.hexversion >= 0x3000000:
-       # pylint: disable=W0622
-       basestring = str
 
 _items = []
 def process(mysettings, key, logentries, fulltext):
@@ -61,7 +58,7 @@ def _finalize():
                                                "ERROR": printer.eerror,
                                                "LOG": printer.einfo,
                                                "QA": printer.ewarn}
-                               if isinstance(msgcontent, basestring):
+                               if isinstance(msgcontent, str):
                                        msgcontent = [msgcontent]
                                for line in msgcontent:
                                        fmap[msgtype](line.strip("\n"))
diff --git a/lib/portage/elog/mod_syslog.py b/lib/portage/elog/mod_syslog.py
index 8b26ffa1e..d2ad89d65 100644
--- a/lib/portage/elog/mod_syslog.py
+++ b/lib/portage/elog/mod_syslog.py
@@ -7,9 +7,6 @@ import syslog
 from portage.const import EBUILD_PHASES
 from portage import _encodings
 
-if sys.hexversion >= 0x3000000:
-       # pylint: disable=W0622
-       basestring = str
 
 _pri = {
        "INFO"   : syslog.LOG_INFO,
@@ -25,7 +22,7 @@ def process(mysettings, key, logentries, fulltext):
                if not phase in logentries:
                        continue
                for msgtype, msgcontent in logentries[phase]:
-                       if isinstance(msgcontent, basestring):
+                       if isinstance(msgcontent, str):
                                msgcontent = [msgcontent]
                        for line in msgcontent:
                                line = "%s: %s: %s" % (key, phase, line)
diff --git a/lib/portage/emaint/modules/binhost/binhost.py 
b/lib/portage/emaint/modules/binhost/binhost.py
index cf9516112..6a17610bb 100644
--- a/lib/portage/emaint/modules/binhost/binhost.py
+++ b/lib/portage/emaint/modules/binhost/binhost.py
@@ -1,4 +1,4 @@
-# Copyright 2005-2014 Gentoo Foundation
+# Copyright 2005-2020 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 import errno
@@ -11,9 +11,6 @@ from portage.versions import _pkg_str
 
 import sys
 
-if sys.hexversion >= 0x3000000:
-       # pylint: disable=W0622
-       long = int
 
 class BinhostHandler(object):
 
@@ -54,9 +51,9 @@ class BinhostHandler(object):
                        return False
 
                try:
-                       if long(mtime) != s[stat.ST_MTIME]:
+                       if int(mtime) != s[stat.ST_MTIME]:
                                return True
-                       if long(size) != long(s.st_size):
+                       if int(size) != int(s.st_size):
                                return True
                except ValueError:
                        return True
diff --git a/lib/portage/emaint/modules/sync/sync.py 
b/lib/portage/emaint/modules/sync/sync.py
index ac37fdcfa..d41a8158e 100644
--- a/lib/portage/emaint/modules/sync/sync.py
+++ b/lib/portage/emaint/modules/sync/sync.py
@@ -1,4 +1,4 @@
-# Copyright 2014-2019 Gentoo Authors
+# Copyright 2014-2020 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 import logging
@@ -32,11 +32,6 @@ portage.proxy.lazyimport.lazyimport(globals(),
 
 warn = create_color_func("WARN")
 
-if sys.hexversion >= 0x3000000:
-       _basestring = str
-else:
-       _basestring = basestring
-
 
 class SyncRepos(object):
 
@@ -125,7 +120,7 @@ class SyncRepos(object):
                        return_messages = options.get('return-messages', False)
                else:
                        return_messages = False
-               if isinstance(repo_names, _basestring):
+               if isinstance(repo_names, str):
                        repo_names = repo_names.split()
                success, repos, msgs = self._get_repos(auto_sync_only=False,
                        match_repos=repo_names)
diff --git a/lib/portage/exception.py b/lib/portage/exception.py
index a1c3c5f17..fa59f1f14 100644
--- a/lib/portage/exception.py
+++ b/lib/portage/exception.py
@@ -1,4 +1,4 @@
-# Copyright 1998-2019 Gentoo Authors
+# Copyright 1998-2020 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 import signal
@@ -6,9 +6,6 @@ import sys
 from portage import _encodings, _unicode_encode, _unicode_decode
 from portage.localization import _
 
-if sys.hexversion >= 0x3000000:
-       # pylint: disable=W0622
-       basestring = str
 
 class PortageException(Exception):
        """General superclass for portage exceptions"""
@@ -24,7 +21,7 @@ class PortageException(Exception):
        else:
                def __init__(self, value):
                        self.value = value[:]
-                       if isinstance(self.value, basestring):
+                       if isinstance(self.value, str):
                                self.value = _unicode_decode(self.value,
                                        encoding=_encodings['content'], 
errors='replace')
 
@@ -180,7 +177,7 @@ class UnsupportedAPIException(PortagePackageException):
                self.cpv, self.eapi = cpv, eapi
        def __str__(self):
                eapi = self.eapi
-               if not isinstance(eapi, basestring):
+               if not isinstance(eapi, str):
                        eapi = str(eapi)
                eapi = eapi.lstrip("-")
                msg = _("Unable to do any operations on '%(cpv)s', since "
diff --git a/lib/portage/getbinpkg.py b/lib/portage/getbinpkg.py
index 14dc149b1..437481659 100644
--- a/lib/portage/getbinpkg.py
+++ b/lib/portage/getbinpkg.py
@@ -64,9 +64,6 @@ else:
 
 _all_errors = tuple(_all_errors)
 
-if sys.hexversion >= 0x3000000:
-       # pylint: disable=W0622
-       long = int
 
 def make_metadata_dict(data):
 
@@ -910,7 +907,7 @@ class PackageIndex(object):
 
        def write(self, pkgfile):
                if self.modified:
-                       self.header["TIMESTAMP"] = str(long(time.time()))
+                       self.header["TIMESTAMP"] = str(int(time.time()))
                        self.header["PACKAGES"] = str(len(self.packages))
                keys = list(self.header)
                keys.sort()
diff --git a/lib/portage/locks.py b/lib/portage/locks.py
index 535698dfe..5c7a3f266 100644
--- a/lib/portage/locks.py
+++ b/lib/portage/locks.py
@@ -23,9 +23,6 @@ from portage.util import writemsg
 from portage.util.install_mask import _raise_exc
 from portage.localization import _
 
-if sys.hexversion >= 0x3000000:
-       # pylint: disable=W0622
-       basestring = str
 
 HARDLINK_FD = -2
 _HARDLINK_POLL_LATENCY = 3 # seconds
@@ -167,7 +164,7 @@ def _lockfile_iteration(mypath, wantnewlockfile=False, 
unlinkfile=False,
        # deprecated due to ambiguity in whether or not it's safe to close
        # the file descriptor, making it prone to "Bad file descriptor" errors
        # or file descriptor leaks.
-       if isinstance(mypath, basestring) and mypath[-1] == '/':
+       if isinstance(mypath, str) and mypath[-1] == '/':
                mypath = mypath[:-1]
 
        lockfilename_path = mypath
@@ -192,7 +189,7 @@ def _lockfile_iteration(mypath, wantnewlockfile=False, 
unlinkfile=False,
        else:
                lockfilename = mypath
 
-       if isinstance(mypath, basestring):
+       if isinstance(mypath, str):
                if not os.path.exists(os.path.dirname(mypath)):
                        raise DirectoryNotFound(os.path.dirname(mypath))
                preexisting = os.path.exists(lockfilename)
@@ -306,7 +303,7 @@ def _lockfile_iteration(mypath, wantnewlockfile=False, 
unlinkfile=False,
                                os.close(myfd)
                        lockfilename_path = _unicode_decode(lockfilename_path,
                                encoding=_encodings['fs'], errors='strict')
-                       if not isinstance(lockfilename_path, basestring):
+                       if not isinstance(lockfilename_path, str):
                                raise
                        link_success = hardlink_lockfile(lockfilename_path,
                                waiting_msg=waiting_msg, flags=flags)
@@ -319,7 +316,7 @@ def _lockfile_iteration(mypath, wantnewlockfile=False, 
unlinkfile=False,
                        raise
 
        fstat_result = None
-       if isinstance(lockfilename, basestring) and myfd != HARDLINK_FD and 
unlinkfile:
+       if isinstance(lockfilename, str) and myfd != HARDLINK_FD and unlinkfile:
                try:
                        (removed, fstat_result) = _lockfile_was_removed(myfd, 
lockfilename)
                except Exception:
@@ -461,7 +458,7 @@ def unlockfile(mytuple):
                return True
        
        # myfd may be None here due to myfd = mypath in lockfile()
-       if isinstance(lockfilename, basestring) and \
+       if isinstance(lockfilename, str) and \
                not os.path.exists(lockfilename):
                writemsg(_("lockfile does not exist '%s'\n") % lockfilename, 1)
                if myfd is not None:
@@ -474,7 +471,7 @@ def unlockfile(mytuple):
                        unlinkfile = 1
                locking_method(myfd, fcntl.LOCK_UN)
        except OSError:
-               if isinstance(lockfilename, basestring):
+               if isinstance(lockfilename, str):
                        _open_fds[myfd].close()
                raise IOError(_("Failed to unlock file '%s'\n") % lockfilename)
 
@@ -507,7 +504,7 @@ def unlockfile(mytuple):
        # why test lockfilename?  because we may have been handed an
        # fd originally, and the caller might not like having their
        # open fd closed automatically on them.
-       if isinstance(lockfilename, basestring):
+       if isinstance(lockfilename, str):
                _open_fds[myfd].close()
 
        return True
diff --git a/lib/portage/mail.py b/lib/portage/mail.py
index 11923eea6..6a351aa24 100644
--- a/lib/portage/mail.py
+++ b/lib/portage/mail.py
@@ -1,4 +1,4 @@
-# Copyright 1998-2014 Gentoo Foundation
+# Copyright 1998-2020 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 # Since python ebuilds remove the 'email' module when USE=build
@@ -20,9 +20,6 @@ from portage.localization import _
 import portage
 
 if sys.hexversion >= 0x3000000:
-       # pylint: disable=W0622
-       basestring = str
-
        def _force_ascii_if_necessary(s):
                # Force ascii encoding in order to avoid UnicodeEncodeError
                # from smtplib.sendmail with python3 (bug #291331).
@@ -68,7 +65,7 @@ def create_message(sender, recipient, subject, body, 
attachments=None):
                for x in attachments:
                        if isinstance(x, BaseMessage):
                                mymessage.attach(x)
-                       elif isinstance(x, basestring):
+                       elif isinstance(x, str):
                                if sys.hexversion < 0x3000000:
                                        x = _unicode_encode(x,
                                                encoding=_encodings['content'],
diff --git a/lib/portage/manifest.py b/lib/portage/manifest.py
index 4bca61e86..fecc5fccd 100644
--- a/lib/portage/manifest.py
+++ b/lib/portage/manifest.py
@@ -1,4 +1,4 @@
-# Copyright 1999-2016 Gentoo Foundation
+# Copyright 1999-2020 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 from __future__ import unicode_literals
@@ -33,12 +33,6 @@ _manifest_re = re.compile(
        r'^(' + '|'.join(MANIFEST2_IDENTIFIERS) + r') (\S+)( \d+( \S+ \S+)+)$',
        re.UNICODE)
 
-if sys.hexversion >= 0x3000000:
-       # pylint: disable=W0622
-       _unicode = str
-       basestring = str
-else:
-       _unicode = unicode
 
 class FileNotInManifestException(PortageException):
        pass
@@ -76,7 +70,7 @@ def guessThinManifestFileType(filename):
        return "DIST"
 
 def parseManifest2(line):
-       if not isinstance(line, basestring):
+       if not isinstance(line, str):
                line = ' '.join(line)
        myentry = None
        match = _manifest_re.match(line)
@@ -321,7 +315,7 @@ class Manifest(object):
                                        # thin manifests with no DIST entries, 
myentries is
                                        # non-empty for all currently known use 
cases.
                                        write_atomic(self.getFullname(), 
"".join("%s\n" %
-                                               _unicode(myentry) for myentry 
in myentries))
+                                               str(myentry) for myentry in 
myentries))
                                        self._apply_max_mtime(preserved_stats, 
myentries)
                                        rval = True
                                else:
diff --git a/lib/portage/package/ebuild/config.py 
b/lib/portage/package/ebuild/config.py
index 47c180c12..1b57dbd38 100644
--- a/lib/portage/package/ebuild/config.py
+++ b/lib/portage/package/ebuild/config.py
@@ -1,4 +1,4 @@
-# Copyright 2010-2019 Gentoo Authors
+# Copyright 2010-2020 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 from __future__ import unicode_literals
@@ -68,9 +68,6 @@ from portage.package.ebuild._config.VirtualsManager import 
VirtualsManager
 from portage.package.ebuild._config.helper import ordered_by_atom_specificity, 
prune_incremental
 from portage.package.ebuild._config.unpack_dependencies import 
load_unpack_dependencies_configuration
 
-if sys.hexversion >= 0x3000000:
-       # pylint: disable=W0622
-       basestring = str
 
 _feature_flags_cache = {}
 
@@ -1450,7 +1447,7 @@ class config(object):
                pkg = None
                built_use = None
                explicit_iuse = None
-               if not isinstance(mycpv, basestring):
+               if not isinstance(mycpv, str):
                        pkg = mycpv
                        mycpv = pkg.cpv
                        mydb = pkg._metadata
@@ -2735,7 +2732,7 @@ class config(object):
 
        def __setitem__(self,mykey,myvalue):
                "set a value; will be thrown away at reset() time"
-               if not isinstance(myvalue, basestring):
+               if not isinstance(myvalue, str):
                        raise ValueError("Invalid type being used as a value: 
'%s': '%s'" % (str(mykey),str(myvalue)))
 
                # Avoid potential UnicodeDecodeError exceptions later.
@@ -2768,7 +2765,7 @@ class config(object):
                for x, myvalue in self.iteritems():
                        if x in environ_filter:
                                continue
-                       if not isinstance(myvalue, basestring):
+                       if not isinstance(myvalue, str):
                                writemsg(_("!!! Non-string value in config: 
%s=%s\n") % \
                                        (x, myvalue), noiselevel=-1)
                                continue
diff --git a/lib/portage/package/ebuild/doebuild.py 
b/lib/portage/package/ebuild/doebuild.py
index 2bff94cb1..e4bae989a 100644
--- a/lib/portage/package/ebuild/doebuild.py
+++ b/lib/portage/package/ebuild/doebuild.py
@@ -94,10 +94,6 @@ from _emerge.EbuildSpawnProcess import EbuildSpawnProcess
 from _emerge.Package import Package
 from _emerge.RootConfig import RootConfig
 
-if sys.hexversion >= 0x3000000:
-       _unicode = str
-else:
-       _unicode = unicode
 
 _unsandboxed_phases = frozenset([
        "clean", "cleanrm", "config",
@@ -2399,7 +2395,7 @@ def _post_src_install_soname_symlinks(mysettings, out):
 
                # Compute the multilib category and write it back to the file.
                entry.multilib_category = compute_multilib_category(elf_header)
-               needed_file.write(_unicode(entry))
+               needed_file.write(str(entry))
 
                if entry.multilib_category is None:
                        if not qa_prebuilt or qa_prebuilt.match(
@@ -2450,7 +2446,7 @@ def _post_src_install_soname_symlinks(mysettings, out):
        if unrecognized_elf_files:
                qa_msg = ["QA Notice: Unrecognized ELF file(s):"]
                qa_msg.append("")
-               qa_msg.extend("\t%s" % _unicode(entry).rstrip()
+               qa_msg.extend("\t%s" % str(entry).rstrip()
                        for entry in unrecognized_elf_files)
                qa_msg.append("")
                for line in qa_msg:
diff --git a/lib/portage/package/ebuild/getmaskingstatus.py 
b/lib/portage/package/ebuild/getmaskingstatus.py
index 4b9e588f7..92224f90f 100644
--- a/lib/portage/package/ebuild/getmaskingstatus.py
+++ b/lib/portage/package/ebuild/getmaskingstatus.py
@@ -1,4 +1,4 @@
-# Copyright 2010-2014 Gentoo Foundation
+# Copyright 2010-2020 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 from __future__ import unicode_literals
@@ -14,9 +14,6 @@ from portage.localization import _
 from portage.package.ebuild.config import config
 from portage.versions import catpkgsplit, _pkg_str
 
-if sys.hexversion >= 0x3000000:
-       # pylint: disable=W0622
-       basestring = str
 
 class _UnmaskHint(object):
 
@@ -48,7 +45,7 @@ def _getmaskingstatus(mycpv, settings, portdb, myrepo=None):
 
        metadata = None
        installed = False
-       if not isinstance(mycpv, basestring):
+       if not isinstance(mycpv, str):
                # emerge passed in a Package instance
                pkg = mycpv
                mycpv = pkg.cpv
diff --git a/lib/portage/process.py b/lib/portage/process.py
index ceb454030..bbe8d02f0 100644
--- a/lib/portage/process.py
+++ b/lib/portage/process.py
@@ -40,9 +40,6 @@ try:
 except ImportError:
        max_fd_limit = 256
 
-if sys.hexversion >= 0x3000000:
-       # pylint: disable=W0622
-       basestring = str
 
 # Support PEP 446 for Python >=3.4
 try:
@@ -287,7 +284,7 @@ def spawn(mycommand, env=None, opt_name=None, 
fd_pipes=None, returnpid=False,
        """
 
        # mycommand is either a str or a list
-       if isinstance(mycommand, basestring):
+       if isinstance(mycommand, str):
                mycommand = mycommand.split()
 
        env = os.environ if env is None else env
diff --git a/lib/portage/proxy/lazyimport.py b/lib/portage/proxy/lazyimport.py
index d4258706d..532f3ce0a 100644
--- a/lib/portage/proxy/lazyimport.py
+++ b/lib/portage/proxy/lazyimport.py
@@ -1,4 +1,4 @@
-# Copyright 2009-2014 Gentoo Foundation
+# Copyright 2009-2020 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 __all__ = ['lazyimport']
@@ -13,9 +13,6 @@ except ImportError:
 
 from portage.proxy.objectproxy import ObjectProxy
 
-if sys.hexversion >= 0x3000000:
-       # pylint: disable=W0622
-       basestring = str
 
 _module_proxies = {}
 _module_proxies_lock = threading.RLock()
@@ -169,7 +166,7 @@ def lazyimport(scope, *args):
                if len(parts) == 1:
                        name = s
 
-                       if not name or not isinstance(name, basestring):
+                       if not name or not isinstance(name, str):
                                raise ValueError(name)
 
                        components = name.split('.')
diff --git a/lib/portage/repository/config.py b/lib/portage/repository/config.py
index 3a5425be7..4c9c47304 100644
--- a/lib/portage/repository/config.py
+++ b/lib/portage/repository/config.py
@@ -28,9 +28,6 @@ from portage import _encodings
 from portage import manifest
 import portage.sync
 
-if sys.hexversion >= 0x3000000:
-       # pylint: disable=W0622
-       basestring = str
 
 # Characters prohibited by repoman's file.name check.
 _invalid_path_char_re = re.compile(r'[^a-zA-Z0-9._\-+/]')
@@ -671,7 +668,7 @@ class RepoConfigLoader(object):
 
                recursive_paths = []
                for p in paths:
-                       if isinstance(p, basestring):
+                       if isinstance(p, str):
                                recursive_paths.extend(_recursive_file_list(p))
                        else:
                                recursive_paths.append(p)
diff --git a/lib/portage/sync/getaddrinfo_validate.py 
b/lib/portage/sync/getaddrinfo_validate.py
index 5e6009c74..8ed87626e 100644
--- a/lib/portage/sync/getaddrinfo_validate.py
+++ b/lib/portage/sync/getaddrinfo_validate.py
@@ -1,10 +1,8 @@
-# Copyright 2010 Gentoo Foundation
+# Copyright 2010-2020 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 import sys
 
-if sys.hexversion >= 0x3000000:
-       basestring = str
 
 def getaddrinfo_validate(addrinfos):
        """
@@ -19,7 +17,7 @@ def getaddrinfo_validate(addrinfos):
                                continue
                        if len(addrinfo[4]) < 2:
                                continue
-                       if not isinstance(addrinfo[4][0], basestring):
+                       if not isinstance(addrinfo[4][0], str):
                                continue
                except TypeError:
                        continue
diff --git a/lib/portage/sync/modules/rsync/rsync.py 
b/lib/portage/sync/modules/rsync/rsync.py
index 9be96c24c..02f53c08e 100644
--- a/lib/portage/sync/modules/rsync/rsync.py
+++ b/lib/portage/sync/modules/rsync/rsync.py
@@ -36,11 +36,6 @@ try:
 except ImportError:
        gemato = None
 
-if sys.hexversion >= 0x3000000:
-       # pylint: disable=W0622
-       _unicode = str
-else:
-       _unicode = unicode
 
 SERVER_OUT_OF_DATE = -1
 EXCEEDED_MAX_RETRIES = -2
@@ -243,7 +238,7 @@ class RsyncSync(NewBase):
                        except socket.error as e:
                                writemsg_level(
                                        "!!! getaddrinfo failed for '%s': %s\n"
-                                       % (_unicode_decode(hostname), 
_unicode(e)),
+                                       % (_unicode_decode(hostname), str(e)),
                                        noiselevel=-1, level=logging.ERROR)
 
                        if addrinfos:
diff --git a/lib/portage/tests/dep/test_match_from_list.py 
b/lib/portage/tests/dep/test_match_from_list.py
index 3080479c2..3ad119fe6 100644
--- a/lib/portage/tests/dep/test_match_from_list.py
+++ b/lib/portage/tests/dep/test_match_from_list.py
@@ -1,4 +1,4 @@
-# Copyright 2006-2014 Gentoo Foundation
+# Copyright 2006-2020 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 import sys
@@ -6,9 +6,6 @@ from portage.tests import TestCase
 from portage.dep import Atom, match_from_list, _repo_separator
 from portage.versions import catpkgsplit, _pkg_str
 
-if sys.hexversion >= 0x3000000:
-       # pylint: disable=W0622
-       basestring = str
 
 class Package(object):
        """
@@ -43,7 +40,7 @@ class Package(object):
                        self.all = frozenset(iuse)
 
                def is_valid_flag(self, flags):
-                       if isinstance(flags, basestring):
+                       if isinstance(flags, str):
                                flags = [flags]
                        for flag in flags:
                                if not flag in self.all:
diff --git a/lib/portage/tests/resolver/ResolverPlayground.py 
b/lib/portage/tests/resolver/ResolverPlayground.py
index ec2e31ae9..d39073a4c 100644
--- a/lib/portage/tests/resolver/ResolverPlayground.py
+++ b/lib/portage/tests/resolver/ResolverPlayground.py
@@ -34,9 +34,6 @@ try:
 except ImportError:
        cnf_path_repoman = None
 
-if sys.hexversion >= 0x3000000:
-       # pylint: disable=W0622
-       basestring = str
 
 class ResolverPlayground(object):
        """
@@ -411,7 +408,7 @@ class ResolverPlayground(object):
 
                        for eclass_name, eclass_content in eclasses.items():
                                with open(os.path.join(eclass_dir, 
"{}.eclass".format(eclass_name)), 'wt') as f:
-                                       if isinstance(eclass_content, 
basestring):
+                                       if isinstance(eclass_content, str):
                                                eclass_content = 
[eclass_content]
                                        for line in eclass_content:
                                                f.write("{}\n".format(line))
@@ -695,7 +692,7 @@ class ResolverPlaygroundTestCase(object):
                                        if expected:
                                                new_expected = []
                                                for obj in expected:
-                                                       if isinstance(obj, 
basestring):
+                                                       if isinstance(obj, str):
                                                                if obj[:1] == 
"!":
                                                                        
new_expected.append(obj)
                                                                        continue
@@ -720,7 +717,7 @@ class ResolverPlaygroundTestCase(object):
                                        while got_stack and expected_stack:
                                                got_token = got_stack.pop()
                                                expected_obj = 
expected_stack.pop()
-                                               if isinstance(expected_obj, 
basestring):
+                                               if isinstance(expected_obj, 
str):
                                                        
new_expected.append(expected_obj)
                                                        if got_token == 
expected_obj:
                                                                continue
diff --git a/lib/portage/tests/unicode/test_string_format.py 
b/lib/portage/tests/unicode/test_string_format.py
index 9d4366a91..fa092616c 100644
--- a/lib/portage/tests/unicode/test_string_format.py
+++ b/lib/portage/tests/unicode/test_string_format.py
@@ -1,4 +1,4 @@
-# Copyright 2010-2014 Gentoo Foundation
+# Copyright 2010-2020 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 from __future__ import unicode_literals
@@ -11,9 +11,6 @@ from portage.tests import TestCase
 from _emerge.DependencyArg import DependencyArg
 from _emerge.UseFlagDisplay import UseFlagDisplay
 
-if sys.hexversion >= 0x3000000:
-       # pylint: disable=W0622
-       basestring = str
 
 STR_IS_UNICODE = sys.hexversion >= 0x3000000
 
@@ -93,7 +90,7 @@ class StringFormatTestCase(TestCase):
                                        # Use unicode_literals for unicode 
format string so that
                                        # __unicode__() is called in Python 2.
                                        formatted_str = "%s" % (e,)
-                                       
self.assertEqual(isinstance(formatted_str, basestring), True)
+                                       
self.assertEqual(isinstance(formatted_str, str), True)
 
                                        if STR_IS_UNICODE:
 
diff --git a/lib/portage/update.py b/lib/portage/update.py
index 1920d213a..94af2645d 100644
--- a/lib/portage/update.py
+++ b/lib/portage/update.py
@@ -1,4 +1,4 @@
-# Copyright 1999-2014 Gentoo Foundation
+# Copyright 1999-2020 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 from __future__ import unicode_literals
@@ -27,12 +27,6 @@ from portage.eapi import _get_eapi_attrs
 from portage.exception import DirectoryNotFound, InvalidAtom, PortageException
 from portage.localization import _
 
-if sys.hexversion >= 0x3000000:
-       # pylint: disable=W0622
-       long = int
-       _unicode = str
-else:
-       _unicode = unicode
 
 ignored_dbentries = ("CONTENTS", "environment.bz2")
 
@@ -42,8 +36,8 @@ def update_dbentry(update_cmd, mycontent, eapi=None, 
parent=None):
                eapi = parent.eapi
 
        if update_cmd[0] == "move":
-               old_value = _unicode(update_cmd[1])
-               new_value = _unicode(update_cmd[2])
+               old_value = str(update_cmd[1])
+               new_value = str(update_cmd[2])
 
                # Use isvalidatom() to check if this move is valid for the
                # EAPI (characters allowed in package names may vary).
@@ -70,7 +64,7 @@ def update_dbentry(update_cmd, mycontent, eapi=None, 
parent=None):
                                        match_from_list(new_atom, [parent]):
                                        continue
 
-                               split_content[i] = _unicode(new_atom)
+                               split_content[i] = str(new_atom)
                                modified = True
 
                        if modified:
@@ -197,7 +191,7 @@ def grab_updates(updpath, prev_mtimes=None):
                mystat = os.stat(file_path)
                if update_data or \
                        file_path not in prev_mtimes or \
-                       long(prev_mtimes[file_path]) != mystat[stat.ST_MTIME]:
+                       int(prev_mtimes[file_path]) != mystat[stat.ST_MTIME]:
                        f = io.open(_unicode_encode(file_path,
                                encoding=_encodings['fs'], errors='strict'),
                                mode='r', encoding=_encodings['repo.content'], 
errors='replace')
diff --git a/lib/portage/util/__init__.py b/lib/portage/util/__init__.py
index 154431a53..4d1fb9a51 100644
--- a/lib/portage/util/__init__.py
+++ b/lib/portage/util/__init__.py
@@ -1,4 +1,4 @@
-# Copyright 2004-2017 Gentoo Foundation
+# Copyright 2004-2020 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 from __future__ import unicode_literals
@@ -49,10 +49,6 @@ from portage.localization import _
 from portage.proxy.objectproxy import ObjectProxy
 from portage.cache.mappings import UserDict
 
-if sys.hexversion >= 0x3000000:
-       _unicode = str
-else:
-       _unicode = unicode
 
 noiselimit = 0
 
@@ -505,7 +501,7 @@ def grabfile_package(myfilename, compatlevel=0, recursive=0,
                        writemsg(_("--- Invalid atom in %s: %s\n") % 
(source_file, e),
                                noiselevel=-1)
                else:
-                       if pkg_orig == _unicode(pkg):
+                       if pkg_orig == str(pkg):
                                # normal atom, so return as Atom instance
                                if remember_source_file:
                                        atoms.append((pkg, source_file))
diff --git a/lib/portage/util/_dyn_libs/LinkageMapELF.py 
b/lib/portage/util/_dyn_libs/LinkageMapELF.py
index 473a1243d..a3ec4fcc7 100644
--- a/lib/portage/util/_dyn_libs/LinkageMapELF.py
+++ b/lib/portage/util/_dyn_libs/LinkageMapELF.py
@@ -27,10 +27,6 @@ from portage.util import writemsg_level
 from portage.util._dyn_libs.NeededEntry import NeededEntry
 from portage.util.elf.header import ELFHeader
 
-if sys.hexversion >= 0x3000000:
-       _unicode = str
-else:
-       _unicode = unicode
 
 # Map ELF e_machine values from NEEDED.ELF.2 to approximate multilib
 # categories. This approximation will produce incorrect results on x32
@@ -333,7 +329,7 @@ class LinkageMapELF(object):
                                        entry.multilib_category = 
compute_multilib_category(elf_header)
                                        entry.filename = 
entry.filename[root_len:]
                                        owner = plibs.pop(entry.filename, None)
-                                       lines.append((owner, "scanelf", 
_unicode(entry)))
+                                       lines.append((owner, "scanelf", 
str(entry)))
                                proc.wait()
                                proc.stdout.close()
 
diff --git a/lib/portage/util/_dyn_libs/PreservedLibsRegistry.py 
b/lib/portage/util/_dyn_libs/PreservedLibsRegistry.py
index f83b82a31..7909f258c 100644
--- a/lib/portage/util/_dyn_libs/PreservedLibsRegistry.py
+++ b/lib/portage/util/_dyn_libs/PreservedLibsRegistry.py
@@ -1,4 +1,4 @@
-# Copyright 1998-2014 Gentoo Foundation
+# Copyright 1998-2020 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 import errno
@@ -25,9 +25,6 @@ from portage.util import writemsg_level
 from portage.versions import cpv_getkey
 from portage.locks import lockfile, unlockfile
 
-if sys.hexversion >= 0x3000000:
-       # pylint: disable=W0622
-       basestring = str
 
 class PreservedLibsRegistry(object):
        """ This class handles the tracking of preserved library objects """
@@ -154,7 +151,7 @@ class PreservedLibsRegistry(object):
                int conversion and a possible ValueError resulting
                from vardb corruption.
                """
-               if not isinstance(counter, basestring):
+               if not isinstance(counter, str):
                        counter = str(counter)
                return _unicode_decode(counter).strip()
 
diff --git a/lib/portage/util/_urlopen.py b/lib/portage/util/_urlopen.py
index 1d8ba3fd3..c74fb2691 100644
--- a/lib/portage/util/_urlopen.py
+++ b/lib/portage/util/_urlopen.py
@@ -1,4 +1,4 @@
-# Copyright 2012-2019 Gentoo Authors
+# Copyright 2012-2020 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 import io
@@ -16,9 +16,6 @@ except ImportError:
        import urlparse as urllib_parse
        import urllib2 as urllib_request
 
-if sys.hexversion >= 0x3000000:
-       # pylint: disable=W0622
-       long = int
 
 # to account for the difference between TIMESTAMP of the index' contents
 #  and the file-'mtime'
@@ -63,14 +60,14 @@ def urlopen(url, if_modified_since=None):
                return hdl
 
 def _timestamp_to_http(timestamp):
-       dt = datetime.fromtimestamp(float(long(timestamp)+TIMESTAMP_TOLERANCE))
+       dt = datetime.fromtimestamp(float(int(timestamp)+TIMESTAMP_TOLERANCE))
        stamp = mktime(dt.timetuple())
        return formatdate(timeval=stamp, localtime=False, usegmt=True)
 
 def _http_to_timestamp(http_datetime_string):
        tuple = parsedate(http_datetime_string)
        timestamp = mktime(tuple)
-       return str(long(timestamp))
+       return str(int(timestamp))
 
 class CompressedResponseProcessor(urllib_request.HTTPBasicAuthHandler):
        # Handler for compressed responses.
diff --git a/lib/portage/util/changelog.py b/lib/portage/util/changelog.py
index 9fc5ab6df..dab756129 100644
--- a/lib/portage/util/changelog.py
+++ b/lib/portage/util/changelog.py
@@ -1,21 +1,21 @@
 #!/usr/bin/python -b
-# Copyright 2009-2015 Gentoo Foundation
+# Copyright 2009-2020 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 
 from portage.manifest import guessManifestFileType
-from portage.versions import _unicode, pkgsplit, vercmp
+from portage.versions import pkgsplit, vercmp
 
 
-class ChangeLogTypeSort(_unicode):
+class ChangeLogTypeSort(str):
        """
        Helps to sort file names by file type and other criteria.
        """
        def __new__(cls, status_change, file_name):
-               return _unicode.__new__(cls, status_change + file_name)
+               return str.__new__(cls, status_change + file_name)
 
        def __init__(self, status_change, file_name):
-               _unicode.__init__(status_change + file_name)
+               str.__init__(status_change + file_name)
                self.status_change = status_change
                self.file_name = file_name
                self.file_type = guessManifestFileType(file_name)
diff --git a/lib/portage/util/compression_probe.py 
b/lib/portage/util/compression_probe.py
index 7d595670b..d3f3de7a2 100644
--- a/lib/portage/util/compression_probe.py
+++ b/lib/portage/util/compression_probe.py
@@ -6,8 +6,6 @@ import errno
 import re
 import sys
 
-if sys.hexversion >= 0x3000000:
-       basestring = str
 
 from portage import _encodings, _unicode_encode
 from portage.exception import FileNotFound, PermissionDenied
@@ -87,7 +85,7 @@ def compression_probe(f):
        @rtype str or None
        """
 
-       open_file = isinstance(f, basestring)
+       open_file = isinstance(f, str)
        if open_file:
                try:
                        f = open(_unicode_encode(f,
diff --git a/lib/portage/util/configparser.py b/lib/portage/util/configparser.py
index c4c92a603..f3452231f 100644
--- a/lib/portage/util/configparser.py
+++ b/lib/portage/util/configparser.py
@@ -1,4 +1,4 @@
-# Copyright 2016 Gentoo Foundation
+# Copyright 2016-2020 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 __all__ = ['ConfigParserError', 'NoOptionError', 'ParsingError',
@@ -26,11 +26,6 @@ from portage import _encodings
 from portage import _unicode_encode
 
 
-if sys.hexversion >= 0x3000000:
-       # pylint: disable=W0622
-       basestring = str
-
-
 def read_configs(parser, paths):
        """
        Read configuration files from given paths into the specified
@@ -50,7 +45,7 @@ def read_configs(parser, paths):
                source_kwarg = 'filename'
 
        for p in paths:
-               if isinstance(p, basestring):
+               if isinstance(p, str):
                        f = None
                        try:
                                f = io.open(_unicode_encode(p,
diff --git a/lib/portage/util/env_update.py b/lib/portage/util/env_update.py
index 032101043..5c036b6ba 100644
--- a/lib/portage/util/env_update.py
+++ b/lib/portage/util/env_update.py
@@ -1,4 +1,4 @@
-# Copyright 2010-2014 Gentoo Foundation
+# Copyright 2010-2020 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 __all__ = ['env_update']
@@ -23,9 +23,6 @@ from portage.util.listdir import listdir
 from portage.dbapi.vartree import vartree
 from portage.package.ebuild.config import config
 
-if sys.hexversion >= 0x3000000:
-       # pylint: disable=W0622
-       long = int
 
 def env_update(makelinks=1, target_root=None, prev_mtimes=None, contents=None,
        env=None, writemsg_level=None, vardbapi=None):
@@ -257,7 +254,7 @@ def _env_update(makelinks, target_root, prev_mtimes, 
contents, env,
                        if e.errno != errno.ENOENT:
                                raise
 
-       current_time = long(time.time())
+       current_time = int(time.time())
        mtime_changed = False
 
        lib_dirs = set()
diff --git a/lib/portage/util/install_mask.py b/lib/portage/util/install_mask.py
index 0013effa1..fa12e4910 100644
--- a/lib/portage/util/install_mask.py
+++ b/lib/portage/util/install_mask.py
@@ -1,4 +1,4 @@
-# Copyright 2018-2019 Gentoo Authors
+# Copyright 2018-2020 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 __all__ = ['install_mask_dir', 'InstallMask']
@@ -20,11 +20,6 @@ from portage.exception import (
 )
 from portage.util import normalize_path
 
-if sys.hexversion >= 0x3000000:
-       _unicode = str
-else:
-       _unicode = unicode
-
 
 def _defaultdict_tree():
        return collections.defaultdict(_defaultdict_tree)
@@ -152,7 +147,7 @@ def _raise_exc(e):
        wrapper_cls = _exc_map.get(e.errno)
        if wrapper_cls is None:
                raise
-       wrapper = wrapper_cls(_unicode(e))
+       wrapper = wrapper_cls(str(e))
        wrapper.__cause__ = e
        raise wrapper
 
diff --git a/lib/portage/versions.py b/lib/portage/versions.py
index 100c8b84d..63edd0c79 100644
--- a/lib/portage/versions.py
+++ b/lib/portage/versions.py
@@ -15,11 +15,6 @@ import sys
 import warnings
 from functools import lru_cache
 
-if sys.hexversion < 0x3000000:
-       _unicode = unicode
-else:
-       _unicode = str
-       long = int
 
 import portage
 portage.proxy.lazyimport.lazyimport(globals(),
@@ -348,7 +343,7 @@ def catpkgsplit(mydata, silent=1, eapi=None):
        retval = (cat, p_split[0], p_split[1], p_split[2])
        return retval
 
-class _pkg_str(_unicode):
+class _pkg_str(str):
        """
        This class represents a cpv. It inherits from str (unicode in python2) 
and
        has attributes that cache results for use by functions like catpkgsplit 
and
@@ -367,15 +362,15 @@ class _pkg_str(_unicode):
        def __new__(cls, cpv, metadata=None, settings=None, eapi=None,
                repo=None, slot=None, build_time=None, build_id=None,
                file_size=None, mtime=None, db=None):
-               return _unicode.__new__(cls, cpv)
+               return str.__new__(cls, cpv)
 
        def __init__(self, cpv, metadata=None, settings=None, eapi=None,
                repo=None, slot=None, build_time=None, build_id=None,
                file_size=None, mtime=None, db=None):
-               if not isinstance(cpv, _unicode):
-                       # Avoid TypeError from _unicode.__init__ with PyPy.
+               if not isinstance(cpv, str):
+                       # Avoid TypeError from str.__init__ with PyPy.
                        cpv = _unicode_decode(cpv)
-               _unicode.__init__(cpv)
+               str.__init__(cpv)
                if metadata is not None:
                        self.__dict__['_metadata'] = metadata
                        slot = metadata.get('SLOT', slot)
@@ -440,7 +435,7 @@ class _pkg_str(_unicode):
        def _long(var, default):
                if var is not None:
                        try:
-                               var = long(var)
+                               var = int(var)
                        except ValueError:
                                if var:
                                        var = -1
diff --git a/lib/portage/xml/metadata.py b/lib/portage/xml/metadata.py
index 64246c828..204e0b099 100644
--- a/lib/portage/xml/metadata.py
+++ b/lib/portage/xml/metadata.py
@@ -1,4 +1,4 @@
-# Copyright 2010-2019 Gentoo Authors
+# Copyright 2010-2020 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 """Provides an easy-to-use python interface to Gentoo's metadata.xml file.
@@ -55,10 +55,6 @@ import xml.etree.ElementTree
 from portage import _encodings, _unicode_encode
 from portage.util import cmp_sort_key, unique_everseen
 
-if sys.hexversion >= 0x3000000:
-       # pylint: disable=W0622
-       basestring = str
-
 
 class _MetadataTreeBuilder(xml.etree.ElementTree.TreeBuilder):
        """
@@ -479,12 +475,12 @@ def parse_metadata_use(xml_tree):
                                stack.append(flag)
                                while stack:
                                        obj = stack.pop()
-                                       if isinstance(obj, basestring):
+                                       if isinstance(obj, str):
                                                inner_text.append(obj)
                                                continue
-                                       if isinstance(obj.text, basestring):
+                                       if isinstance(obj.text, str):
                                                inner_text.append(obj.text)
-                                       if isinstance(obj.tail, basestring):
+                                       if isinstance(obj.tail, str):
                                                stack.append(obj.tail)
                                        stack.extend(reversed(obj))
 
diff --git a/repoman/lib/repoman/__init__.py b/repoman/lib/repoman/__init__.py
index 4f3e59e50..fda942c92 100644
--- a/repoman/lib/repoman/__init__.py
+++ b/repoman/lib/repoman/__init__.py
@@ -20,9 +20,6 @@ except ImportError as e:
        sys.stderr.write("    "+str(e)+"\n\n")
        raise
 
-if sys.hexversion >= 0x3000000:
-       # pylint: disable=W0622
-       long = int
 
 VERSION = "HEAD"
 
@@ -62,10 +59,10 @@ if VERSION == 'HEAD':
                                                                head_timestamp 
= None
                                                                if 
len(output_lines) > 3:
                                                                        try:
-                                                                               
head_timestamp = long(output_lines[3])
+                                                                               
head_timestamp = int(output_lines[3])
                                                                        except 
ValueError:
                                                                                
pass
-                                                               timestamp = 
long(time.time())
+                                                               timestamp = 
int(time.time())
                                                                if 
head_timestamp is not None and timestamp > head_timestamp:
                                                                        
timestamp = timestamp - head_timestamp
                                                                if not 
patchlevel:
diff --git a/repoman/lib/repoman/main.py b/repoman/lib/repoman/main.py
index 731e8eae2..86f2198fd 100755
--- a/repoman/lib/repoman/main.py
+++ b/repoman/lib/repoman/main.py
@@ -36,8 +36,6 @@ from repoman import utilities
 from repoman.modules.vcs.settings import VCSSettings
 from repoman import VERSION
 
-if sys.hexversion >= 0x3000000:
-       basestring = str
 
 bad = create_color_func("BAD")
 
diff --git a/repoman/lib/repoman/metadata.py b/repoman/lib/repoman/metadata.py
index 4537d2ce2..111d80f0a 100644
--- a/repoman/lib/repoman/metadata.py
+++ b/repoman/lib/repoman/metadata.py
@@ -14,11 +14,6 @@ from portage import os
 from portage.output import green
 from portage.package.ebuild.fetch import fetch
 
-if sys.hexversion >= 0x3000000:
-       basestring = str
-
-if sys.hexversion >= 0x3000000:
-       basestring = str
 
 # Note: This URI is hardcoded in all metadata.xml files.  We can't
 # change it without updating all the xml files in the tree.
diff --git a/repoman/lib/repoman/modules/scan/metadata/ebuild_metadata.py 
b/repoman/lib/repoman/modules/scan/metadata/ebuild_metadata.py
index 2edf8f7f2..6c0822897 100644
--- a/repoman/lib/repoman/modules/scan/metadata/ebuild_metadata.py
+++ b/repoman/lib/repoman/modules/scan/metadata/ebuild_metadata.py
@@ -5,9 +5,6 @@
 import re
 import sys
 
-if sys.hexversion >= 0x3000000:
-       basestring = str
-
 from repoman.modules.scan.scanbase import ScanBase
 
 from portage.dep import use_reduce
@@ -24,7 +21,7 @@ class EbuildMetadata(ScanBase):
        def invalidchar(self, **kwargs):
                ebuild = kwargs.get('ebuild').get()
                for k, v in ebuild.metadata.items():
-                       if not isinstance(v, basestring):
+                       if not isinstance(v, str):
                                continue
                        m = NON_ASCII_RE.search(v)
                        if m is not None:
diff --git a/repoman/lib/repoman/utilities.py b/repoman/lib/repoman/utilities.py
index 790d5e516..fa2cab68e 100644
--- a/repoman/lib/repoman/utilities.py
+++ b/repoman/lib/repoman/utilities.py
@@ -50,9 +50,6 @@ from repoman.copyrights import update_copyright, 
update_copyright_year
 normalize_path = util.normalize_path
 util.initialize_logger()
 
-if sys.hexversion >= 0x3000000:
-       basestring = str
-
 
 def have_profile_dir(path, maxdepth=3, filename="profiles.desc"):
        """
-- 
2.27.0


Reply via email to