mirror of
https://github.com/explosion/spaCy.git
synced 2024-11-10 19:57:17 +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