{"id":22355,"library":"setuptools-dynamic-dependencies","title":"setuptools-dynamic-dependencies","description":"A setuptools plugin that allows dependencies to be specified dynamically based on the package's version number. It enables conditional dependency resolution within setup.py/pyproject.toml using version-range expressions. Current version 1.0.0, requires Python >=3.9, maintained by BeeWare project.","status":"active","version":"1.0.0","language":"python","source_language":"en","source_url":"https://github.com/beeware/setuptools_dynamic_dependencies","tags":["setuptools","plugin","dynamic-dependencies","build"],"install":[{"cmd":"pip install setuptools-dynamic-dependencies","lang":"bash","label":"Latest stable"}],"dependencies":[{"reason":"Runtime dependency for plugin integration","package":"setuptools","optional":false}],"imports":[{"note":"","wrong":"","symbol":"DynamicDependencies","correct":"from setuptools_dynamic_dependencies import DynamicDependencies"}],"quickstart":{"code":"from setuptools import setup\nfrom setuptools_dynamic_dependencies import DynamicDependencies\n\ndynamic_deps = DynamicDependencies()\n# In setup() call:\nsetup(\n    name='mypackage',\n    version='1.0.0',\n    install_requires=dynamic_deps.get_requirements()\n)","lang":"python","description":"Basic integration with setuptools setup() to dynamically resolve dependencies based on package version."},"warnings":[{"fix":"Remove plugin and define dynamic dependencies natively in pyproject.toml using setuptools directives.","message":"This plugin is designed for setuptools < 68. Newer setuptools versions (>=68) natively support dynamic dependencies via pyproject.toml. Consider migrating to native setuptools configuration.","severity":"deprecated","affected_versions":">=1.0.0"},{"fix":"Ensure version is defined before calling DynamicDependencies, either hardcoded or via a fallback.","message":"The plugin resolves dependencies at build time, not install time. It requires the package's version string to be available (e.g., via version.py or hardcoded). If version is imported from a non-existent file during build, it will fail silently or raise an error.","severity":"gotcha","affected_versions":"all"},{"fix":"Read the documentation for supported operators: >, >=, <, <=, ==, and combination with commas.","message":"Version-range expressions use a custom syntax (e.g., '>=1.0,<2.0'). Common range operators (e.g., ~=, !=) are not supported. This can cause confusion when migrating from PEP 440 version specifiers.","severity":"gotcha","affected_versions":"all"}],"env_vars":null,"last_verified":"2026-04-27T00:00:00.000Z","next_check":"2026-07-26T00:00:00.000Z","problems":[{"fix":"Add 'setuptools-dynamic-dependencies' to build-system.requires in pyproject.toml: [build-system]\nrequires = [\"setuptools\", \"setuptools-dynamic-dependencies\"]","cause":"Plugin not installed in the build environment (e.g., in pyproject.toml build-system.requires).","error":"ModuleNotFoundError: No module named 'setuptools_dynamic_dependencies'"},{"fix":"Set the package version before instantiating DynamicDependencies (e.g., from your version module).","cause":"DynamicDependencies instance created before version is set, leading to missing version context.","error":"TypeError: 'NoneType' object is not iterable when calling get_requirements()"}],"ecosystem":"pypi","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null}