Skip to content

Commit 30fee67

Browse files
committed
1 parent 5ea5517 commit 30fee67

File tree

2 files changed

+52
-11
lines changed

2 files changed

+52
-11
lines changed

opentelemetry-instrumentation/src/opentelemetry/instrumentation/bootstrap.py

+35-10
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@
1919
import subprocess
2020
import sys
2121

22-
import pkg_resources
22+
from importlib_metadata import PackageNotFoundError, distribution
23+
from packaging import version
2324

2425
from opentelemetry.instrumentation.bootstrap_gen import (
2526
default_instrumentations,
@@ -83,21 +84,45 @@ def _pip_check():
8384
raise RuntimeError(f"Dependency conflict found: {pip_check}")
8485

8586

87+
# def _is_installed(req):
88+
# if req in sys.modules:
89+
# return True
90+
91+
# try:
92+
# dist = distribution(req).version
93+
# except PackageNotFoundError:
94+
# return False
95+
# except pkg_resources.VersionConflict as exc:
96+
# logger.warning(
97+
# "instrumentation for package %s is available but version %s is installed. Skipping.",
98+
# exc.req,
99+
# exc.dist.as_requirement(), # pylint: disable=no-member
100+
# )
101+
# return False
102+
# return True
103+
104+
86105
def _is_installed(req):
87106
if req in sys.modules:
88107
return True
89108

90109
try:
91-
pkg_resources.get_distribution(req)
92-
except pkg_resources.DistributionNotFound:
93-
return False
94-
except pkg_resources.VersionConflict as exc:
95-
logger.warning(
96-
"instrumentation for package %s is available but version %s is installed. Skipping.",
97-
exc.req,
98-
exc.dist.as_requirement(), # pylint: disable=no-member
99-
)
110+
dist = distribution(req)
111+
# Assuming 'req' is in format 'package==version'
112+
# Modify this as per the format of your 'req' string
113+
required_version = req.split("==")[1] if "==" in req else None
114+
if required_version and version.parse(dist.version) != version.parse(
115+
required_version
116+
):
117+
logger.warning(
118+
"Instrumentation for package %s is available but version %s is installed. Skipping.",
119+
req,
120+
dist.version,
121+
)
122+
return False
123+
except PackageNotFoundError:
100124
return False
125+
101126
return True
102127

103128

opentelemetry-instrumentation/tests/test_dependencies.py

+17-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@
1414

1515
# pylint: disable=protected-access
1616

17-
import pkg_resources
17+
import importlib_metadata
18+
from packaging import version
1819
import pytest
1920

2021
from opentelemetry.instrumentation.dependencies import (
@@ -26,6 +27,21 @@
2627

2728

2829
class TestDependencyConflicts(TestBase):
30+
def _check_version(self, package_spec):
31+
package_name, _, package_version = package_spec.partition('==')
32+
package_name = package_name.strip()
33+
package_version = package_version.strip()
34+
35+
try:
36+
installed_distribution = importlib_metadata.distribution(package_name)
37+
except importlib_metadata.PackageNotFoundError:
38+
return None
39+
40+
installed_version = version.parse(installed_distribution.version)
41+
if package_version and installed_version != version.parse(package_version):
42+
return f'{package_name} {installed_distribution.version}'
43+
return package_name
44+
2945
def test_get_dependency_conflicts_empty(self):
3046
self.assertIsNone(get_dependency_conflicts([]))
3147

0 commit comments

Comments
 (0)