python-poetry/poetry · error · RuntimeError
{dependency}: unknown direct dependency type {dependency.sou
Error message
{dependency}: unknown direct dependency type {dependency.source_type} What it means
Raised by Provider.search_for_direct_origin_dependency() when a dependency claims direct-origin status (is_vcs/is_file/is_directory/is_url all false) but source_type is set to an unrecognised value. The else branch fires because none of the known direct-origin handlers matched.
Source
Thrown at src/poetry/puzzle/provider.py:304
elif dependency.is_vcs():
dependency = cast("VCSDependency", dependency)
package = self._search_for_vcs(dependency)
elif dependency.is_file():
dependency = cast("FileDependency", dependency)
package = self._search_for_file(dependency)
elif dependency.is_directory():
dependency = cast("DirectoryDependency", dependency)
package = self._search_for_directory(dependency)
elif dependency.is_url():
dependency = cast("URLDependency", dependency)
package = self._search_for_url(dependency)
else:
raise RuntimeError(
f"{dependency}: unknown direct dependency type {dependency.source_type}"
)
if dependency.is_vcs():
dependency._source_reference = package.source_reference
dependency._source_resolved_reference = package.source_resolved_reference
dependency._source_subdirectory = package.source_subdirectory
dependency._constraint = package.version
dependency._pretty_constraint = package.version.text
self._deferred_cache[dependency] = package
return package
def search_for(self, dependency: Dependency) -> list[DependencyPackage]:
"""
Search for the specifications that match the given dependency.View on GitHub (pinned to 92b74dcfe3)
Solutions
- Inspect the dependency's source_type value to identify the unknown type.
- If you introduced a new source type, extend search_for_direct_origin_dependency with a matching branch.
- Recreate the dependency from a clean pyproject.toml declaration rather than constructing it ad hoc.
- Check for a corrupted/edited poetry.lock that produced an odd source_type on load.
Example fix
// before: Dependency with unknown source_type dep = Dependency(name='x', constraint='*', source_type='ftp') provider.search_for_direct_origin_dependency(dep) RuntimeError: unknown direct dependency type ftp // after: use a supported source_type dep = Dependency(name='x', constraint='*', source_type='url', url='https://...')
Defensive patterns
Strategy: type-guard
Validate before calling
SUPPORTED = {"vcs", "file", "directory", "url", None}
def source_type_supported(dep) -> bool:
return getattr(dep, "source_type", None) in SUPPORTED Type guard
SUPPORTED_DIRECT = {"vcs", "file", "directory", "url"}
def is_known_direct_origin(dep) -> bool:
return getattr(dep, "source_type", None) in SUPPORTED_DIRECT Try / catch
from poetry.puzzle.provider import Provider
try:
provider.search_for_direct_origin_dependency(dep)
except RuntimeError as e:
if "unknown direct dependency type" in str(e):
# rebuild dep with a supported source_type
... Prevention
- Construct Dependency objects with only supported source_type values.
- When extending source types, also extend the provider's branch logic.
- Do not load dependencies from hand-edited/corrupt lockfiles.
- Add unit tests asserting source_type validity when building deps programmatically.
When it happens
Trigger: A Dependency object has source_type set to something other than 'vcs'/'file'/'directory'/'url' (or null) and is passed to search_for_direct_origin_dependency. This is almost always a programmatic/serialisation bug rather than user config.
Common situations: A custom Dependency subclass introducing a new source_type without extending the provider; a dependency deserialised from a malformed lockfile with a garbage source_type; internal code constructing a Dependency with an unrecognised source_type.
Related errors
- The dependency name for {dependency.name} does not match the
- Incompatible constraints in requirements of {package}: {cons
- Could not find a matching version of package {name}
- Unsupported VCS dependency {vcs}
- The Poetry plugin must be an instance of Plugin or Applicati
AI-assisted analysis of python-poetry/poetry@92b74dcfe3 (2026-08-04).
Data as JSON: /data/errors/2d2bed38bf207c17.json.
Report an issue: GitHub.