mirror of
				https://github.com/explosion/spaCy.git
				synced 2025-10-31 07:57:35 +03:00 
			
		
		
		
	Improve usage of pkg_resources and handling of entry points (#4387)
* Only import pkg_resources where it's needed Apparently it's really slow * Use importlib_metadata for entry points * Revert "Only import pkg_resources where it's needed" This reverts commit5ed8c03afa. * Revert "Revert "Only import pkg_resources where it's needed"" This reverts commit8b30b57957. * Revert "Use importlib_metadata for entry points" This reverts commit9f071f5c40. * Revert "Revert "Use importlib_metadata for entry points"" This reverts commit02e12a17ec. * Skip test that weirdly hangs * Fix hanging test by using global
This commit is contained in:
		
							parent
							
								
									d53a8d9313
								
							
						
					
					
						commit
						9cd6ca3e4d
					
				|  | @ -11,6 +11,7 @@ numpy>=1.15.0 | ||||||
| requests>=2.13.0,<3.0.0 | requests>=2.13.0,<3.0.0 | ||||||
| plac<1.0.0,>=0.9.6 | plac<1.0.0,>=0.9.6 | ||||||
| pathlib==1.0.1; python_version < "3.4" | pathlib==1.0.1; python_version < "3.4" | ||||||
|  | importlib_metadata>=0.23; python_version < "3.8" | ||||||
| # Optional dependencies | # Optional dependencies | ||||||
| jsonschema>=2.6.0,<3.1.0 | jsonschema>=2.6.0,<3.1.0 | ||||||
| # Development dependencies | # Development dependencies | ||||||
|  |  | ||||||
|  | @ -50,6 +50,7 @@ install_requires = | ||||||
|     wasabi>=0.2.0,<1.1.0 |     wasabi>=0.2.0,<1.1.0 | ||||||
|     srsly>=0.1.0,<1.1.0 |     srsly>=0.1.0,<1.1.0 | ||||||
|     pathlib==1.0.1; python_version < "3.4" |     pathlib==1.0.1; python_version < "3.4" | ||||||
|  |     importlib_metadata>=0.23; python_version < "3.8" | ||||||
| 
 | 
 | ||||||
| [options.extras_require] | [options.extras_require] | ||||||
| lookups = | lookups = | ||||||
|  |  | ||||||
|  | @ -6,7 +6,6 @@ import requests | ||||||
| import os | import os | ||||||
| import subprocess | import subprocess | ||||||
| import sys | import sys | ||||||
| import pkg_resources |  | ||||||
| from wasabi import Printer | from wasabi import Printer | ||||||
| 
 | 
 | ||||||
| from .link import link | from .link import link | ||||||
|  | @ -87,6 +86,8 @@ def download(model, direct=False, *pip_args): | ||||||
| 
 | 
 | ||||||
| def require_package(name): | def require_package(name): | ||||||
|     try: |     try: | ||||||
|  |         import pkg_resources | ||||||
|  | 
 | ||||||
|         pkg_resources.working_set.require(name) |         pkg_resources.working_set.require(name) | ||||||
|         return True |         return True | ||||||
|     except:  # noqa: E722 |     except:  # noqa: E722 | ||||||
|  |  | ||||||
|  | @ -1,7 +1,6 @@ | ||||||
| # coding: utf8 | # coding: utf8 | ||||||
| from __future__ import unicode_literals, print_function | from __future__ import unicode_literals, print_function | ||||||
| 
 | 
 | ||||||
| import pkg_resources |  | ||||||
| from pathlib import Path | from pathlib import Path | ||||||
| import sys | import sys | ||||||
| import requests | import requests | ||||||
|  | @ -109,6 +108,8 @@ def get_model_links(compat): | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def get_model_pkgs(compat, all_models): | def get_model_pkgs(compat, all_models): | ||||||
|  |     import pkg_resources | ||||||
|  | 
 | ||||||
|     pkgs = {} |     pkgs = {} | ||||||
|     for pkg_name, pkg_data in pkg_resources.working_set.by_key.items(): |     for pkg_name, pkg_data in pkg_resources.working_set.by_key.items(): | ||||||
|         package = pkg_name.replace("-", "_") |         package = pkg_name.replace("-", "_") | ||||||
|  |  | ||||||
|  | @ -35,6 +35,11 @@ try: | ||||||
| except ImportError: | except ImportError: | ||||||
|     cupy = None |     cupy = None | ||||||
| 
 | 
 | ||||||
|  | try:  # Python 3.8 | ||||||
|  |     import importlib.metadata as importlib_metadata | ||||||
|  | except ImportError: | ||||||
|  |     import importlib_metadata  # noqa: F401 | ||||||
|  | 
 | ||||||
| try: | try: | ||||||
|     from thinc.neural.optimizers import Optimizer  # noqa: F401 |     from thinc.neural.optimizers import Optimizer  # noqa: F401 | ||||||
| except ImportError: | except ImportError: | ||||||
|  |  | ||||||
|  | @ -2,7 +2,6 @@ | ||||||
| from __future__ import unicode_literals, print_function | from __future__ import unicode_literals, print_function | ||||||
| 
 | 
 | ||||||
| import os | import os | ||||||
| import pkg_resources |  | ||||||
| import importlib | import importlib | ||||||
| import re | import re | ||||||
| from pathlib import Path | from pathlib import Path | ||||||
|  | @ -28,7 +27,7 @@ except ImportError: | ||||||
| 
 | 
 | ||||||
| from .symbols import ORTH | from .symbols import ORTH | ||||||
| from .compat import cupy, CudaStream, path2str, basestring_, unicode_ | from .compat import cupy, CudaStream, path2str, basestring_, unicode_ | ||||||
| from .compat import import_file | from .compat import import_file, importlib_metadata | ||||||
| from .errors import Errors, Warnings, deprecation_warning | from .errors import Errors, Warnings, deprecation_warning | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -37,6 +36,11 @@ _data_path = Path(__file__).parent / "data" | ||||||
| _PRINT_ENV = False | _PRINT_ENV = False | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | # NB: Ony ever call this once! If called more than ince within the | ||||||
|  | # function, test_issue1506 hangs and it's not 100% clear why. | ||||||
|  | AVAILABLE_ENTRY_POINTS = importlib_metadata.entry_points() | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| class ENTRY_POINTS(object): | class ENTRY_POINTS(object): | ||||||
|     """Available entry points to register extensions.""" |     """Available entry points to register extensions.""" | ||||||
| 
 | 
 | ||||||
|  | @ -253,6 +257,8 @@ def is_package(name): | ||||||
|     name (unicode): Name of package. |     name (unicode): Name of package. | ||||||
|     RETURNS (bool): True if installed package, False if not. |     RETURNS (bool): True if installed package, False if not. | ||||||
|     """ |     """ | ||||||
|  |     import pkg_resources | ||||||
|  | 
 | ||||||
|     name = name.lower()  # compare package name against lowercase name |     name = name.lower()  # compare package name against lowercase name | ||||||
|     packages = pkg_resources.working_set.by_key.keys() |     packages = pkg_resources.working_set.by_key.keys() | ||||||
|     for package in packages: |     for package in packages: | ||||||
|  | @ -282,7 +288,7 @@ def get_entry_points(key): | ||||||
|     RETURNS (dict): Entry points, keyed by name. |     RETURNS (dict): Entry points, keyed by name. | ||||||
|     """ |     """ | ||||||
|     result = {} |     result = {} | ||||||
|     for entry_point in pkg_resources.iter_entry_points(key): |     for entry_point in AVAILABLE_ENTRY_POINTS.get(key, []): | ||||||
|         result[entry_point.name] = entry_point.load() |         result[entry_point.name] = entry_point.load() | ||||||
|     return result |     return result | ||||||
| 
 | 
 | ||||||
|  | @ -296,7 +302,7 @@ def get_entry_point(key, value, default=None): | ||||||
|     default: Optional default value to return. |     default: Optional default value to return. | ||||||
|     RETURNS: The loaded entry point or None. |     RETURNS: The loaded entry point or None. | ||||||
|     """ |     """ | ||||||
|     for entry_point in pkg_resources.iter_entry_points(key): |     for entry_point in AVAILABLE_ENTRY_POINTS.get(key, []): | ||||||
|         if entry_point.name == value: |         if entry_point.name == value: | ||||||
|             return entry_point.load() |             return entry_point.load() | ||||||
|     return default |     return default | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user