{"id":755,"library":"entrypoints","title":"Entrypoints","description":"The `entrypoints` library facilitates the discovery and loading of entry points advertised by installed Python packages. It offers a lightweight and faster alternative to `pkg_resources` for this specific functionality, avoiding the full package scans that can slow down `pkg_resources` at import time. The current version is 0.4. The package is in maintenance-only mode, with new code advised to use the `importlib.metadata` module from the Python standard library for entry point management.","status":"maintenance","version":"0.4","language":"python","source_language":"en","source_url":"https://github.com/takluyver/entrypoints","tags":["entry points","plugin discovery","packaging","metadata"],"install":[{"cmd":"pip install entrypoints","lang":"bash","label":"Install with pip"}],"dependencies":[],"imports":[{"symbol":"get_group_all","correct":"from entrypoints import get_group_all"},{"symbol":"get_group_named","correct":"from entrypoints import get_group_named"},{"symbol":"EntryPoint","correct":"from entrypoints import EntryPoint"}],"quickstart":{"code":"from entrypoints import get_group_all\n\n# Example: Find all 'console_scripts' entry points\nconsole_scripts = get_group_all('console_scripts')\n\nprint(f\"Found {len(console_scripts)} console scripts:\")\nfor ep in console_scripts:\n    print(f\"  - {ep.name}: {ep.module}.{ep.attr}\")\n    try:\n        # Load the entry point (e.g., a function)\n        loaded_object = ep.load()\n        # You can then call the loaded_object if it's a function\n        # print(f\"    Loaded object: {loaded_object}\")\n    except Exception as e:\n        print(f\"    Could not load {ep.name}: {e}\")","lang":"python","description":"This quickstart demonstrates how to find and load entry points, specifically 'console_scripts'. It iterates through found entry points, prints their details, and attempts to load the associated Python object."},"warnings":[{"fix":"Migrate to `importlib.metadata` for new implementations: `from importlib.metadata import entry_points` (or `from importlib_metadata import entry_points` for older Python).","message":"The `entrypoints` package is in maintenance-only mode. New code should use `importlib.metadata` (part of the Python standard library since 3.8, non-provisional since 3.10) for discovering and loading entry points. For Python versions older than 3.8, consider using the `importlib_metadata` backport.","severity":"breaking","affected_versions":"All versions"},{"fix":"Ensure a clean and controlled Python environment, ideally using virtual environments, where only the desired version of a package is available. Rely on `pip` to manage package installations to avoid multiple `.dist-info` or `.egg-info` directories for the same package.","message":"When multiple versions of the same distribution are present in different directories on `sys.path`, `entrypoints` follows a 'first one wins' rule. This typically aligns with Python's import logic, but can lead to unexpected behavior if specific versions are expected.","severity":"gotcha","affected_versions":"All versions"},{"fix":"Always use standard package managers like `pip` for installation. Avoid manual manipulation of `site-packages` or `dist-info`/`egg-info` directories. If issues arise, a clean reinstallation in a fresh virtual environment is recommended.","message":"`entrypoints` relies on `pip` (or similar tools) to ensure only one `.dist-info` or `.egg-info` directory exists for each installed package. If this assumption is violated, there's no reliable way to pick the correct metadata, which can lead to incorrect entry point resolution.","severity":"gotcha","affected_versions":"All versions"}],"env_vars":null,"last_verified":"2026-05-12T18:37:53.596Z","next_check":"2026-06-27T00:00:00.000Z","problems":[{"fix":"Pin your `importlib-metadata` package to version 4.13.0 or earlier (`pip install 'importlib-metadata<5'`). Alternatively, if using `importlib.metadata` directly, adopt the modern `select()` method to retrieve entry points by group or name, rather than dictionary-like access.","cause":"This error typically occurs when using an older API for accessing entry points (like `get()`) on an `EntryPoints` object, which has changed its interface in `importlib-metadata` versions 5.0 and higher. The `entrypoints` library itself is in maintenance mode and newer Python versions often implicitly use `importlib.metadata`.","error":"AttributeError: 'EntryPoints' object has no attribute 'get'"},{"fix":"Ensure your package has `__init__.py` files in all its directories to be recognized as a package. Verify the module path specified in your `console_scripts` entry point (e.g., `my_script=my_package.module:function`) is correct and that the package is installed in the active Python environment (use `pip install -e .` for development installs).","cause":"This usually happens when a console script defined in `pyproject.toml` or `setup.py` (which internally uses entry points) cannot find the module it's supposed to execute. This can be due to incorrect package structure, missing `__init__.py` files, or the package not being properly installed in the environment where the script is run.","error":"ModuleNotFoundError: No module named 'your_package_name' (when running a console_script)"},{"fix":"Refactor your code to use the `select()` method on the `EntryPoints` object to filter by group or name. For example, instead of `entry_points()['my_group']`, use `entry_points(group='my_group')` or `entry_points().select(group='my_group')`.","cause":"This warning indicates that code is using a dictionary-like interface on the `EntryPoints` object, which is being phased out in `importlib.metadata` (and thus affects `entrypoints` usage as well). While currently a warning, it will become an `AttributeError` in future versions.","error":"DeprecationWarning: SelectableGroups dict interface is deprecated. Use select()."}],"ecosystem":"pypi","meta_description":null,"install_score":100,"install_tag":"verified","quickstart_score":0,"quickstart_tag":"stale","pypi_latest":"0.4","cli_name":"","install_checks":{"last_tested":"2026-05-12","tag":"verified","tag_description":"installs cleanly on critical runtimes, fast import, recently tested","installed_version":null,"pypi_latest":"0.4","is_stale":null,"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"entrypoints","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.03,"mem_mb":1.7,"disk_size":"17.8M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"entrypoints","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.03,"mem_mb":1.7,"disk_size":"17.8M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"entrypoints","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":null,"install_time_s":1.5,"import_time_s":0.02,"mem_mb":1.7,"disk_size":"18M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"entrypoints","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.02,"mem_mb":1.7,"disk_size":"18M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"entrypoints","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.04,"mem_mb":1.9,"disk_size":"19.6M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"entrypoints","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.05,"mem_mb":1.9,"disk_size":"19.6M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"entrypoints","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":null,"install_time_s":1.6,"import_time_s":0.04,"mem_mb":1.9,"disk_size":"20M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"entrypoints","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.04,"mem_mb":1.9,"disk_size":"20M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"entrypoints","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.04,"mem_mb":1.7,"disk_size":"11.5M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"entrypoints","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.04,"mem_mb":1.7,"disk_size":"11.5M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"entrypoints","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":null,"install_time_s":1.4,"import_time_s":0.04,"mem_mb":1.7,"disk_size":"12M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"entrypoints","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.04,"mem_mb":1.7,"disk_size":"12M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"entrypoints","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.03,"mem_mb":1.7,"disk_size":"11.2M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"entrypoints","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.03,"mem_mb":1.7,"disk_size":"11.1M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"entrypoints","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":null,"install_time_s":1.5,"import_time_s":0.03,"mem_mb":1.5,"disk_size":"12M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"entrypoints","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.03,"mem_mb":1.5,"disk_size":"12M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"entrypoints","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.02,"mem_mb":1.6,"disk_size":"17.3M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"entrypoints","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.03,"mem_mb":1.6,"disk_size":"17.3M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"entrypoints","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":null,"install_time_s":1.8,"import_time_s":0.02,"mem_mb":1.6,"disk_size":"18M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"entrypoints","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.02,"mem_mb":1.6,"disk_size":"18M"}]},"quickstart_checks":{"last_tested":"2026-04-24","tag":"stale","tag_description":"widespread failures or data too old to trust","results":[{"runtime":"python:3.10-alpine","exit_code":1},{"runtime":"python:3.10-slim","exit_code":1},{"runtime":"python:3.11-alpine","exit_code":1},{"runtime":"python:3.11-slim","exit_code":1},{"runtime":"python:3.12-alpine","exit_code":1},{"runtime":"python:3.12-slim","exit_code":1},{"runtime":"python:3.13-alpine","exit_code":1},{"runtime":"python:3.13-slim","exit_code":1},{"runtime":"python:3.9-alpine","exit_code":1},{"runtime":"python:3.9-slim","exit_code":1}]}}