diff options
author | Jason R. Coombs <jaraco@jaraco.com> | 2015-12-31 16:47:55 -0500 |
---|---|---|
committer | Jason R. Coombs <jaraco@jaraco.com> | 2015-12-31 16:47:55 -0500 |
commit | d8bf8413cd5b07690fd515498bc074592fae38a5 (patch) | |
tree | 20c2bfb84badebc4978e166a003c0b08c027ed74 | |
parent | cac10881a6f2c2a9d3e76bcca3918b8065d9b3eb (diff) | |
download | python-setuptools-bitbucket-d8bf8413cd5b07690fd515498bc074592fae38a5.tar.gz |
Use the same technique in pkg_resources, relying on an 'extern' module to resolve the conditional import.
-rw-r--r-- | pkg_resources/__init__.py | 13 | ||||
-rw-r--r-- | pkg_resources/extern/__init__.py | 0 | ||||
-rw-r--r-- | pkg_resources/extern/packaging.py | 45 | ||||
-rw-r--r-- | pkg_resources/tests/test_resources.py | 3 | ||||
-rwxr-xr-x | pytest.ini | 2 | ||||
-rwxr-xr-x | setuptools/command/egg_info.py | 2 | ||||
-rw-r--r-- | setuptools/dist.py | 3 |
7 files changed, 53 insertions, 15 deletions
diff --git a/pkg_resources/__init__.py b/pkg_resources/__init__.py index b55e4127..82382962 100644 --- a/pkg_resources/__init__.py +++ b/pkg_resources/__init__.py @@ -87,15 +87,10 @@ try: except ImportError: pass -try: - import pkg_resources._vendor.packaging.version - import pkg_resources._vendor.packaging.specifiers - packaging = pkg_resources._vendor.packaging -except ImportError: - # fallback to naturally-installed version; allows system packagers to - # omit vendored packages. - import packaging.version - import packaging.specifiers + +from pkg_resources.extern import packaging +__import__('pkg_resources.extern.packaging.version') +__import__('pkg_resources.extern.packaging.specifiers') if (3, 0) < sys.version_info < (3, 3): diff --git a/pkg_resources/extern/__init__.py b/pkg_resources/extern/__init__.py new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/pkg_resources/extern/__init__.py diff --git a/pkg_resources/extern/packaging.py b/pkg_resources/extern/packaging.py new file mode 100644 index 00000000..47f58eab --- /dev/null +++ b/pkg_resources/extern/packaging.py @@ -0,0 +1,45 @@ +""" +Handle loading a package from system or from the bundled copy +""" + +import imp + + +_SEARCH_PATH = ['pkg_resources._vendor.packaging', 'packaging'] + + +def _find_module(name, path=None): + """ + Alternative to `imp.find_module` that can also search in subpackages. + """ + + parts = name.split('.') + + for part in parts: + if path is not None: + path = [path] + + fh, path, descr = imp.find_module(part, path) + + return fh, path, descr + + +def _import_in_place(search_path=_SEARCH_PATH): + for mod_name in search_path: + try: + mod_info = _find_module(mod_name) + except ImportError: + continue + + imp.load_module(__name__, *mod_info) + break + + else: + raise ImportError( + "The '{name}' package is required; " + "normally this is bundled with this package so if you get " + "this warning, consult the packager of your " + "distribution.".format(name=_SEARCH_PATH[-1])) + + +_import_in_place() diff --git a/pkg_resources/tests/test_resources.py b/pkg_resources/tests/test_resources.py index 9fda892f..141d63ad 100644 --- a/pkg_resources/tests/test_resources.py +++ b/pkg_resources/tests/test_resources.py @@ -5,14 +5,13 @@ import shutil import string import pytest +from pkg_resources.extern import packaging import pkg_resources from pkg_resources import (parse_requirements, VersionConflict, parse_version, Distribution, EntryPoint, Requirement, safe_version, safe_name, WorkingSet) -packaging = pkg_resources.packaging - def safe_repr(obj, short=False): """ copied from Python2.7""" @@ -1,3 +1,3 @@ [pytest] addopts=--doctest-modules --ignore release.py --ignore setuptools/lib2to3_ex.py --ignore tests/manual_test.py --ignore tests/shlib_test --doctest-glob=pkg_resources/api_tests.txt --ignore scripts/upload-old-releases-as-zip.py -norecursedirs=dist build *.egg setuptools/extern +norecursedirs=dist build *.egg setuptools/extern pkg_resources/extern diff --git a/setuptools/command/egg_info.py b/setuptools/command/egg_info.py index cf46d24a..18a3105f 100755 --- a/setuptools/command/egg_info.py +++ b/setuptools/command/egg_info.py @@ -26,7 +26,7 @@ from pkg_resources import ( safe_version, yield_lines, EntryPoint, iter_entry_points, to_filename) import setuptools.unicode_utils as unicode_utils -from pkg_resources import packaging +from pkg_resources.extern import packaging try: from setuptools_svn import svn_utils diff --git a/setuptools/dist.py b/setuptools/dist.py index 70731225..4964a9e8 100644 --- a/setuptools/dist.py +++ b/setuptools/dist.py @@ -14,13 +14,12 @@ from distutils.errors import (DistutilsOptionError, DistutilsPlatformError, DistutilsSetupError) from setuptools.extern import six +from pkg_resources.extern import packaging from setuptools.depends import Require from setuptools import windows_support import pkg_resources -packaging = pkg_resources.packaging - def _get_unpatched(cls): """Protect against re-patching the distutils if reloaded |