Skip to content

pkg_resources.evaluate_marker ignores the extra argument #2007

@ender-wieczorek

Description

@ender-wieczorek

Problem:

Trying to evaluate markers like extra == "test" and python_version == "2.7" gives an error:

File "/usr/local/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 1378, in evaluate_marker
 return marker.evaluate()
 File "/usr/local/lib/python2.7/dist-packages/pkg_resources/_vendor/packaging/markers.py", line 301, in evaluate
 return _evaluate_markers(self._markers, current_environment)
 File "/usr/local/lib/python2.7/dist-packages/pkg_resources/_vendor/packaging/markers.py", line 226, in _evaluate_markers
 lhs_value = _get_env(environment, lhs.value)
 File "/usr/local/lib/python2.7/dist-packages/pkg_resources/_vendor/packaging/markers.py", line 208, in _get_env
 "{0!r} does not exist in evaluation environment.".format(name)
pkg_resources._vendor.packaging.markers.UndefinedEnvironmentName: 'extra' does not exist in evaluation environment.

An example of such marker is in the testpath distribution that jupyter depends on.

Fix:

diff --git a/pkg_resources/__init__.py b/pkg_resources/__init__.py
index 75563f95..db089550 100644
--- a/pkg_resources/__init__.py
+++ b/pkg_resources/__init__.py
@@ -1376,7 +1376,7 @@ def evaluate_marker(text, extra=None):
     """
     try:
         marker = packaging.markers.Marker(text)
-        return marker.evaluate()
+        return marker.evaluate({'extra': extra})
     except packaging.markers.InvalidMarker as e:
         raise SyntaxError(e)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions