Skip to content

Entry points can not be loaded if there is a package version conflict anywhere in the environment #31

@cpaulik

Description

@cpaulik

If any package dependency is not met the entry point fails to load. Even if this does not impact the functioning of the CLI at all

Could this be replaced by a warning?

E.g.

 Traceback (most recent call last):
  File "/opt/conda/envs/vds-37/lib/python3.7/site-packages/click_plugins/core.py", line 37, in decorator
    group.add_command(entry_point.load())
  File "/opt/conda/envs/vds-37/lib/python3.7/site-packages/pkg_resources/__init__.py", line 2442, in load
    self.require(*args, **kwargs)
  File "/opt/conda/envs/vds-37/lib/python3.7/site-packages/pkg_resources/__init__.py", line 2465, in require
    items = working_set.resolve(reqs, env, installer, extras=self.extras)
  File "/opt/conda/envs/vds-37/lib/python3.7/site-packages/pkg_resources/__init__.py", line 791, in resolve
    raise VersionConflict(dist, req).with_context(dependent_req)
pkg_resources.ContextualVersionConflict: (docutils 0.16 (/opt/conda/envs/vds-37/lib/python3.7/site-packages), Requirement.parse('docutils<0.16,>=0.10'), {'botocore'})

Activity

added a commit that references this issue on Feb 20, 2020
aebc63d
AndrewHoos

AndrewHoos commented on Nov 9, 2020

@AndrewHoos

Related: pypa/setuptools#1826

Possible fixes would be using:

geowurster

geowurster commented on Dec 12, 2020

@geowurster
Member

@AndrewHoos This is helpful information – thanks.

I'll try and spend some time on this in the near future. I did make an attempt several months ago but hit some potential issues and murkiness in my understanding of how entrypoints work. I do think this is worth addressing if possible.

AndrewHoos

AndrewHoos commented on Dec 18, 2020

@AndrewHoos

If all you are doing is listing and loading entry points:

# Replace this
from pkg_resources import iter_entry_points
# with This
from entrypoints import get_group_all

The entry points have a .name and .load() which was enough for me. Bonus points it ran in about 40% of the pkg_resources API.

teije01

teije01 commented on Apr 19, 2021

@teije01

So far, the solution that @AndrewHoos proposed with entrypoints works great. Are you open to update the documentation with this solution?

amrishparmar

amrishparmar commented on Jan 10, 2022

@amrishparmar

Is there any news on progress on this issue (or associated PR #32)?

We've recently updated to Celery 5.2.3 (which uses this click-plugins package) and are running into this problem (although in our case it's a clash with setuptools since Celery decided to tightly pin it)

Warning: entry point could not be loaded. Contact its author for help.
2022-01-10T11:33:01.647435486Z 
2022-01-10T11:33:01.647436986Z
2022-01-10T11:33:01.647438630Z Traceback (most recent call last):
2022-01-10T11:33:01.647440188Z   File "/usr/local/lib/python3.10/site-packages/click_plugins/core.py", line 37, in decorator
2022-01-10T11:33:01.647456725Z     group.add_command(entry_point.load())
2022-01-10T11:33:01.647458198Z   File "/usr/local/lib/python3.10/site-packages/pkg_resources/__init__.py", line 2449, in load
2022-01-10T11:33:01.647459768Z     self.require(*args, **kwargs)
2022-01-10T11:33:01.647461372Z   File "/usr/local/lib/python3.10/site-packages/pkg_resources/__init__.py", line 2472, in require
2022-01-10T11:33:01.647462998Z     items = working_set.resolve(reqs, env, installer, extras=self.extras)
2022-01-10T11:33:01.647464519Z   File "/usr/local/lib/python3.10/site-packages/pkg_resources/__init__.py", line 777, in resolve
2022-01-10T11:33:01.647473224Z     raise VersionConflict(dist, req).with_context(dependent_req)
2022-01-10T11:33:01.647474930Z pkg_resources.ContextualVersionConflict: (setuptools 57.5.0 (/usr/local/lib/python3.10/site-packages), Requirement.parse('setuptools<59.7.0,>=59.1.1'), {'celery'})
valentinsulzer

valentinsulzer commented on Nov 29, 2022

@valentinsulzer

For anyone still reading this thread and using the solution posted by @AndrewHoos, since entrypoints is now in maintenance-only mode it is better to replace from entrypoints import get_group_all with from importlib_metadata import entry_points and then replace get_group_all("foo") with entry_points(group="foo")

teije01

teije01 commented on Jan 6, 2023

@teije01

Thanks for the suggestion @tinosulzer, seems to work fine.

added a commit that references this issue on Jan 30, 2023
added a commit that references this issue on Feb 2, 2023
geowurster

geowurster commented on Jun 9, 2025

@geowurster
Member

I made several attempts at fixing this issue over the years, but couldn't settle on a method that didn't require adding a dependency, or using poorly documented methods inside of setuptools. This issue, and the variety of solutions linked against it, is one of the reasons I have put the project in a state where it can be vendored in #40, aside from the fact that I pretty clearly do not have the time or interest in continuing to maintain the project.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Participants

      @AndrewHoos@cpaulik@geowurster@amrishparmar@valentinsulzer

      Issue actions

        Entry points can not be loaded if there is a package version conflict anywhere in the environment · Issue #31 · click-contrib/click-plugins