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 | ||||
| plac<1.0.0,>=0.9.6 | ||||
| pathlib==1.0.1; python_version < "3.4" | ||||
| importlib_metadata>=0.23; python_version < "3.8" | ||||
| # Optional dependencies | ||||
| jsonschema>=2.6.0,<3.1.0 | ||||
| # Development dependencies | ||||
|  |  | |||
|  | @ -50,6 +50,7 @@ install_requires = | |||
|     wasabi>=0.2.0,<1.1.0 | ||||
|     srsly>=0.1.0,<1.1.0 | ||||
|     pathlib==1.0.1; python_version < "3.4" | ||||
|     importlib_metadata>=0.23; python_version < "3.8" | ||||
| 
 | ||||
| [options.extras_require] | ||||
| lookups = | ||||
|  |  | |||
|  | @ -6,7 +6,6 @@ import requests | |||
| import os | ||||
| import subprocess | ||||
| import sys | ||||
| import pkg_resources | ||||
| from wasabi import Printer | ||||
| 
 | ||||
| from .link import link | ||||
|  | @ -87,6 +86,8 @@ def download(model, direct=False, *pip_args): | |||
| 
 | ||||
| def require_package(name): | ||||
|     try: | ||||
|         import pkg_resources | ||||
| 
 | ||||
|         pkg_resources.working_set.require(name) | ||||
|         return True | ||||
|     except:  # noqa: E722 | ||||
|  |  | |||
|  | @ -1,7 +1,6 @@ | |||
| # coding: utf8 | ||||
| from __future__ import unicode_literals, print_function | ||||
| 
 | ||||
| import pkg_resources | ||||
| from pathlib import Path | ||||
| import sys | ||||
| import requests | ||||
|  | @ -109,6 +108,8 @@ def get_model_links(compat): | |||
| 
 | ||||
| 
 | ||||
| def get_model_pkgs(compat, all_models): | ||||
|     import pkg_resources | ||||
| 
 | ||||
|     pkgs = {} | ||||
|     for pkg_name, pkg_data in pkg_resources.working_set.by_key.items(): | ||||
|         package = pkg_name.replace("-", "_") | ||||
|  |  | |||
|  | @ -35,6 +35,11 @@ try: | |||
| except ImportError: | ||||
|     cupy = None | ||||
| 
 | ||||
| try:  # Python 3.8 | ||||
|     import importlib.metadata as importlib_metadata | ||||
| except ImportError: | ||||
|     import importlib_metadata  # noqa: F401 | ||||
| 
 | ||||
| try: | ||||
|     from thinc.neural.optimizers import Optimizer  # noqa: F401 | ||||
| except ImportError: | ||||
|  |  | |||
|  | @ -2,7 +2,6 @@ | |||
| from __future__ import unicode_literals, print_function | ||||
| 
 | ||||
| import os | ||||
| import pkg_resources | ||||
| import importlib | ||||
| import re | ||||
| from pathlib import Path | ||||
|  | @ -28,7 +27,7 @@ except ImportError: | |||
| 
 | ||||
| from .symbols import ORTH | ||||
| 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 | ||||
| 
 | ||||
| 
 | ||||
|  | @ -37,6 +36,11 @@ _data_path = Path(__file__).parent / "data" | |||
| _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): | ||||
|     """Available entry points to register extensions.""" | ||||
| 
 | ||||
|  | @ -253,6 +257,8 @@ def is_package(name): | |||
|     name (unicode): Name of package. | ||||
|     RETURNS (bool): True if installed package, False if not. | ||||
|     """ | ||||
|     import pkg_resources | ||||
| 
 | ||||
|     name = name.lower()  # compare package name against lowercase name | ||||
|     packages = pkg_resources.working_set.by_key.keys() | ||||
|     for package in packages: | ||||
|  | @ -282,7 +288,7 @@ def get_entry_points(key): | |||
|     RETURNS (dict): Entry points, keyed by name. | ||||
|     """ | ||||
|     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() | ||||
|     return result | ||||
| 
 | ||||
|  | @ -296,7 +302,7 @@ def get_entry_point(key, value, default=None): | |||
|     default: Optional default value to return. | ||||
|     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: | ||||
|             return entry_point.load() | ||||
|     return default | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user