[Python Modernization] Deprecate pkg_resources (#35849)
Discuss thread about this change: [link](https://mail.google.com/mail/u/0/#sent/QgrcJHsBpWNGRlrMktwbppGGfFTVCFLcQgL?compose=new) <!-- If you know who should review your pull request, please assign it to that person, otherwise the pull request would get assigned randomly. If your pull request is for a specific language, please add the appropriate lang label. --> Closes #35849 PiperOrigin-RevId: 607144827
This commit is contained in:
parent
2ca568663f
commit
bb3edd22b3
17
setup.py
17
setup.py
|
|
@ -37,7 +37,6 @@ import sys
|
||||||
import sysconfig
|
import sysconfig
|
||||||
|
|
||||||
import _metadata
|
import _metadata
|
||||||
import pkg_resources
|
|
||||||
from setuptools import Extension
|
from setuptools import Extension
|
||||||
from setuptools.command import egg_info
|
from setuptools.command import egg_info
|
||||||
|
|
||||||
|
|
@ -454,22 +453,6 @@ if "linux" in sys.platform or "darwin" in sys.platform:
|
||||||
DEFINE_MACROS += (("PyMODINIT_FUNC", pymodinit),)
|
DEFINE_MACROS += (("PyMODINIT_FUNC", pymodinit),)
|
||||||
DEFINE_MACROS += (("GRPC_POSIX_FORK_ALLOW_PTHREAD_ATFORK", 1),)
|
DEFINE_MACROS += (("GRPC_POSIX_FORK_ALLOW_PTHREAD_ATFORK", 1),)
|
||||||
|
|
||||||
# By default, Python3 distutils enforces compatibility of
|
|
||||||
# c plugins (.so files) with the OSX version Python was built with.
|
|
||||||
# We need OSX 10.10, the oldest which supports C++ thread_local.
|
|
||||||
# Python 3.9: Mac OS Big Sur sysconfig.get_config_var('MACOSX_DEPLOYMENT_TARGET') returns int (11)
|
|
||||||
if "darwin" in sys.platform:
|
|
||||||
mac_target = sysconfig.get_config_var("MACOSX_DEPLOYMENT_TARGET")
|
|
||||||
if mac_target:
|
|
||||||
mac_target = pkg_resources.parse_version(str(mac_target))
|
|
||||||
if mac_target < pkg_resources.parse_version("10.10.0"):
|
|
||||||
os.environ["MACOSX_DEPLOYMENT_TARGET"] = "10.10"
|
|
||||||
os.environ["_PYTHON_HOST_PLATFORM"] = re.sub(
|
|
||||||
r"macosx-[0-9]+\.[0-9]+-(.+)",
|
|
||||||
r"macosx-10.10-\1",
|
|
||||||
sysconfig.get_platform(),
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def cython_extensions_and_necessity():
|
def cython_extensions_and_necessity():
|
||||||
cython_module_files = [
|
cython_module_files = [
|
||||||
|
|
|
||||||
|
|
@ -72,32 +72,6 @@ Troubleshooting
|
||||||
|
|
||||||
Help, I ...
|
Help, I ...
|
||||||
|
|
||||||
* **... see a** :code:`pkg_resources.VersionConflict` **when I try to install
|
|
||||||
grpc**
|
|
||||||
|
|
||||||
This is likely because :code:`pip` doesn't own the offending dependency,
|
|
||||||
which in turn is likely because your operating system's package manager owns
|
|
||||||
it. You'll need to force the installation of the dependency:
|
|
||||||
|
|
||||||
:code:`pip install --ignore-installed $OFFENDING_DEPENDENCY`
|
|
||||||
|
|
||||||
For example, if you get an error like the following:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
Traceback (most recent call last):
|
|
||||||
File "<string>", line 17, in <module>
|
|
||||||
...
|
|
||||||
File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 509, in find
|
|
||||||
raise VersionConflict(dist, req)
|
|
||||||
pkg_resources.VersionConflict: (six 1.8.0 (/usr/lib/python2.7/dist-packages), Requirement.parse('six>=1.10'))
|
|
||||||
|
|
||||||
You can fix it by doing:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
sudo pip install --ignore-installed six
|
|
||||||
|
|
||||||
* **... see the following error on some platforms**
|
* **... see the following error on some platforms**
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,6 @@ from subprocess import PIPE
|
||||||
import sys
|
import sys
|
||||||
import sysconfig
|
import sysconfig
|
||||||
|
|
||||||
import pkg_resources
|
|
||||||
import setuptools
|
import setuptools
|
||||||
from setuptools import Extension
|
from setuptools import Extension
|
||||||
from setuptools.command import build_ext
|
from setuptools.command import build_ext
|
||||||
|
|
@ -206,22 +205,6 @@ if "linux" in sys.platform or "darwin" in sys.platform:
|
||||||
pymodinit = 'extern "C" __attribute__((visibility ("default"))) PyObject*'
|
pymodinit = 'extern "C" __attribute__((visibility ("default"))) PyObject*'
|
||||||
DEFINE_MACROS += (("PyMODINIT_FUNC", pymodinit),)
|
DEFINE_MACROS += (("PyMODINIT_FUNC", pymodinit),)
|
||||||
|
|
||||||
# By default, Python3 distutils enforces compatibility of
|
|
||||||
# c plugins (.so files) with the OSX version Python was built with.
|
|
||||||
# We need OSX 10.10, the oldest which supports C++ thread_local.
|
|
||||||
if "darwin" in sys.platform:
|
|
||||||
mac_target = sysconfig.get_config_var("MACOSX_DEPLOYMENT_TARGET")
|
|
||||||
if mac_target and (
|
|
||||||
pkg_resources.parse_version(mac_target)
|
|
||||||
< pkg_resources.parse_version("10.10.0")
|
|
||||||
):
|
|
||||||
os.environ["MACOSX_DEPLOYMENT_TARGET"] = "10.10"
|
|
||||||
os.environ["_PYTHON_HOST_PLATFORM"] = re.sub(
|
|
||||||
r"macosx-[0-9]+\.[0-9]+-(.+)",
|
|
||||||
r"macosx-10.10-\1",
|
|
||||||
sysconfig.get_platform(),
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def extension_modules():
|
def extension_modules():
|
||||||
if BUILD_WITH_CYTHON:
|
if BUILD_WITH_CYTHON:
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,12 @@ import unittest
|
||||||
|
|
||||||
import grpc
|
import grpc
|
||||||
from grpc_tools import protoc
|
from grpc_tools import protoc
|
||||||
import pkg_resources
|
|
||||||
|
if sys.version_info >= (3, 9, 0):
|
||||||
|
from importlib import resources
|
||||||
|
else:
|
||||||
|
import pkg_resources
|
||||||
|
|
||||||
|
|
||||||
from tests.unit import test_common
|
from tests.unit import test_common
|
||||||
|
|
||||||
|
|
@ -48,6 +53,22 @@ def _system_path(path_insertion):
|
||||||
sys.path = old_system_path
|
sys.path = old_system_path
|
||||||
|
|
||||||
|
|
||||||
|
def _get_resource_file_name(
|
||||||
|
package_or_requirement: str, resource_name: str
|
||||||
|
) -> str:
|
||||||
|
"""Obtain the filename for a resource on the file system."""
|
||||||
|
file_name = None
|
||||||
|
if sys.version_info >= (3, 9, 0):
|
||||||
|
file_name = (
|
||||||
|
resources.files(package_or_requirement) / resource_name
|
||||||
|
).resolve()
|
||||||
|
else:
|
||||||
|
file_name = pkg_resources.resource_filename(
|
||||||
|
package_or_requirement, resource_name
|
||||||
|
)
|
||||||
|
return str(file_name)
|
||||||
|
|
||||||
|
|
||||||
# NOTE(nathaniel): https://twitter.com/exoplaneteer/status/677259364256747520
|
# NOTE(nathaniel): https://twitter.com/exoplaneteer/status/677259364256747520
|
||||||
# Life lesson "just always default to idempotence" reinforced.
|
# Life lesson "just always default to idempotence" reinforced.
|
||||||
def _create_directory_tree(root, path_components_sequence):
|
def _create_directory_tree(root, path_components_sequence):
|
||||||
|
|
@ -367,7 +388,7 @@ class WellKnownTypesTest(unittest.TestCase):
|
||||||
def testWellKnownTypes(self):
|
def testWellKnownTypes(self):
|
||||||
os.chdir(_TEST_DIR)
|
os.chdir(_TEST_DIR)
|
||||||
out_dir = tempfile.mkdtemp(suffix="wkt_test", dir=".")
|
out_dir = tempfile.mkdtemp(suffix="wkt_test", dir=".")
|
||||||
well_known_protos_include = pkg_resources.resource_filename(
|
well_known_protos_include = _get_resource_file_name(
|
||||||
"grpc_tools", "_proto"
|
"grpc_tools", "_proto"
|
||||||
)
|
)
|
||||||
args = [
|
args = [
|
||||||
|
|
|
||||||
|
|
@ -75,32 +75,6 @@ Troubleshooting
|
||||||
|
|
||||||
Help, I ...
|
Help, I ...
|
||||||
|
|
||||||
* **... see a** :code:`pkg_resources.VersionConflict` **when I try to install
|
|
||||||
grpc**
|
|
||||||
|
|
||||||
This is likely because :code:`pip` doesn't own the offending dependency,
|
|
||||||
which in turn is likely because your operating system's package manager owns
|
|
||||||
it. You'll need to force the installation of the dependency:
|
|
||||||
|
|
||||||
:code:`pip install --ignore-installed $OFFENDING_DEPENDENCY`
|
|
||||||
|
|
||||||
For example, if you get an error like the following:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
Traceback (most recent call last):
|
|
||||||
File "<string>", line 17, in <module>
|
|
||||||
...
|
|
||||||
File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 509, in find
|
|
||||||
raise VersionConflict(dist, req)
|
|
||||||
pkg_resources.VersionConflict: (six 1.8.0 (/usr/lib/python2.7/dist-packages), Requirement.parse('six>=1.10'))
|
|
||||||
|
|
||||||
You can fix it by doing:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
sudo pip install --ignore-installed six
|
|
||||||
|
|
||||||
* **... see compiler errors on some platforms when either installing from source or from the source distribution**
|
* **... see compiler errors on some platforms when either installing from source or from the source distribution**
|
||||||
|
|
||||||
If you see
|
If you see
|
||||||
|
|
|
||||||
|
|
@ -16,9 +16,29 @@ import os
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
from grpc_tools import protoc
|
from grpc_tools import protoc
|
||||||
import pkg_resources
|
|
||||||
import setuptools
|
import setuptools
|
||||||
|
|
||||||
|
if sys.version_info >= (3, 9, 0):
|
||||||
|
from importlib import resources
|
||||||
|
else:
|
||||||
|
import pkg_resources
|
||||||
|
|
||||||
|
|
||||||
|
def _get_resource_file_name(
|
||||||
|
package_or_requirement: str, resource_name: str
|
||||||
|
) -> str:
|
||||||
|
"""Obtain the filename for a resource on the file system."""
|
||||||
|
file_name = None
|
||||||
|
if sys.version_info >= (3, 9, 0):
|
||||||
|
file_name = (
|
||||||
|
resources.files(package_or_requirement) / resource_name
|
||||||
|
).resolve()
|
||||||
|
else:
|
||||||
|
file_name = pkg_resources.resource_filename(
|
||||||
|
package_or_requirement, resource_name
|
||||||
|
)
|
||||||
|
return str(file_name)
|
||||||
|
|
||||||
|
|
||||||
def build_package_protos(package_root, strict_mode=False):
|
def build_package_protos(package_root, strict_mode=False):
|
||||||
proto_files = []
|
proto_files = []
|
||||||
|
|
@ -30,9 +50,7 @@ def build_package_protos(package_root, strict_mode=False):
|
||||||
os.path.abspath(os.path.join(root, filename))
|
os.path.abspath(os.path.join(root, filename))
|
||||||
)
|
)
|
||||||
|
|
||||||
well_known_protos_include = pkg_resources.resource_filename(
|
well_known_protos_include = _get_resource_file_name("grpc_tools", "_proto")
|
||||||
"grpc_tools", "_proto"
|
|
||||||
)
|
|
||||||
|
|
||||||
for proto_file in proto_files:
|
for proto_file in proto_files:
|
||||||
command = [
|
command = [
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,6 @@ from subprocess import PIPE
|
||||||
import sys
|
import sys
|
||||||
import sysconfig
|
import sysconfig
|
||||||
|
|
||||||
import pkg_resources
|
|
||||||
import setuptools
|
import setuptools
|
||||||
from setuptools import Extension
|
from setuptools import Extension
|
||||||
from setuptools.command import build_ext
|
from setuptools.command import build_ext
|
||||||
|
|
@ -214,22 +213,6 @@ if "win32" in sys.platform:
|
||||||
elif "linux" in sys.platform or "darwin" in sys.platform:
|
elif "linux" in sys.platform or "darwin" in sys.platform:
|
||||||
DEFINE_MACROS += (("HAVE_PTHREAD", 1),)
|
DEFINE_MACROS += (("HAVE_PTHREAD", 1),)
|
||||||
|
|
||||||
# By default, Python3 setuptools(distutils) enforces compatibility of
|
|
||||||
# c plugins (.so files) with the OSX version Python was built with.
|
|
||||||
# We need OSX 10.10, the oldest which supports C++ thread_local.
|
|
||||||
if "darwin" in sys.platform:
|
|
||||||
mac_target = sysconfig.get_config_var("MACOSX_DEPLOYMENT_TARGET")
|
|
||||||
if mac_target and (
|
|
||||||
pkg_resources.parse_version(mac_target)
|
|
||||||
< pkg_resources.parse_version("10.10.0")
|
|
||||||
):
|
|
||||||
os.environ["MACOSX_DEPLOYMENT_TARGET"] = "10.10"
|
|
||||||
os.environ["_PYTHON_HOST_PLATFORM"] = re.sub(
|
|
||||||
r"macosx-[0-9]+\.[0-9]+-(.+)",
|
|
||||||
r"macosx-10.10-\1",
|
|
||||||
sysconfig.get_platform(),
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def package_data():
|
def package_data():
|
||||||
tools_path = GRPC_PYTHON_TOOLS_PACKAGE.replace(".", os.path.sep)
|
tools_path = GRPC_PYTHON_TOOLS_PACKAGE.replace(".", os.path.sep)
|
||||||
|
|
|
||||||
|
|
@ -15,15 +15,36 @@
|
||||||
"""Builds the content of xds-protos package"""
|
"""Builds the content of xds-protos package"""
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
from grpc_tools import protoc
|
from grpc_tools import protoc
|
||||||
import pkg_resources
|
|
||||||
|
if sys.version_info >= (3, 9, 0):
|
||||||
|
from importlib import resources
|
||||||
|
else:
|
||||||
|
import pkg_resources
|
||||||
|
|
||||||
|
|
||||||
def localize_path(p):
|
def localize_path(p):
|
||||||
return os.path.join(*p.split("/"))
|
return os.path.join(*p.split("/"))
|
||||||
|
|
||||||
|
|
||||||
|
def _get_resource_file_name(
|
||||||
|
package_or_requirement: str, resource_name: str
|
||||||
|
) -> str:
|
||||||
|
"""Obtain the filename for a resource on the file system."""
|
||||||
|
file_name = None
|
||||||
|
if sys.version_info >= (3, 9, 0):
|
||||||
|
file_name = (
|
||||||
|
resources.files(package_or_requirement) / resource_name
|
||||||
|
).resolve()
|
||||||
|
else:
|
||||||
|
file_name = pkg_resources.resource_filename(
|
||||||
|
package_or_requirement, resource_name
|
||||||
|
)
|
||||||
|
return str(file_name)
|
||||||
|
|
||||||
|
|
||||||
# We might not want to compile all the protos
|
# We might not want to compile all the protos
|
||||||
EXCLUDE_PROTO_PACKAGES_LIST = tuple(
|
EXCLUDE_PROTO_PACKAGES_LIST = tuple(
|
||||||
localize_path(p)
|
localize_path(p)
|
||||||
|
|
@ -46,7 +67,7 @@ OPENCENSUS_PROTO_ROOT = os.path.join(
|
||||||
GRPC_ROOT, "third_party", "opencensus-proto", "src"
|
GRPC_ROOT, "third_party", "opencensus-proto", "src"
|
||||||
)
|
)
|
||||||
OPENTELEMETRY_PROTO_ROOT = os.path.join(GRPC_ROOT, "third_party", "opentelemetry")
|
OPENTELEMETRY_PROTO_ROOT = os.path.join(GRPC_ROOT, "third_party", "opentelemetry")
|
||||||
WELL_KNOWN_PROTOS_INCLUDE = pkg_resources.resource_filename("grpc_tools", "_proto")
|
WELL_KNOWN_PROTOS_INCLUDE = _get_resource_file_name("grpc_tools", "_proto")
|
||||||
|
|
||||||
OUTPUT_PATH = WORK_DIR
|
OUTPUT_PATH = WORK_DIR
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue