Metadata-Version: 2.1
Name: dfetch
Version: 0.9.1
Summary: Dependency fetcher
Author-email: Ben Spoor <dfetch@spoor.cc>
License: MIT
Project-URL: Documentation, https://dfetch.readthedocs.io/
Project-URL: Repository, https://github.com/dfetch-org/dfetch
Keywords: dfetch,vendoring,dependencies
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Console
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python
Requires-Python: >=3.7
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: PyYAML==6.0.2
Requires-Dist: coloredlogs==15.0.1
Requires-Dist: pykwalify==1.8.0
Requires-Dist: halo==0.0.31
Requires-Dist: colorama==0.4.6
Requires-Dist: typing-extensions==4.7.1; python_version <= "3.7.0"
Requires-Dist: typing-extensions==4.12.2; python_version > "3.7.0"
Requires-Dist: sarif-om==1.0.4
Requires-Dist: semver==3.0.2
Requires-Dist: patch-ng==1.18.1
Requires-Dist: importlib-resources==5.4.0; python_version <= "3.7.0"
Requires-Dist: cyclonedx-python-lib==4.2.2
Requires-Dist: infer-license==0.1.0; python_version <= "3.10.0"
Requires-Dist: infer-license==0.2.0; python_version > "3.10.0"
Requires-Dist: setuptools; python_version >= "3.12"
Provides-Extra: development
Requires-Dist: black==24.10.0; extra == "development"
Requires-Dist: doc8==1.1.2; extra == "development"
Requires-Dist: pydocstyle==6.3.0; extra == "development"
Requires-Dist: radon==6.0.1; extra == "development"
Requires-Dist: xenon==0.9.3; extra == "development"
Requires-Dist: types-PyYAML==6.0.12.20241230; extra == "development"
Requires-Dist: codespell==2.3.0; extra == "development"
Requires-Dist: mypy==1.14.1; extra == "development"
Requires-Dist: bandit==1.8.0; extra == "development"
Requires-Dist: vulture==2.14; extra == "development"
Requires-Dist: pyroma==4.2; extra == "development"
Requires-Dist: isort==5.13.2; extra == "development"
Requires-Dist: pylint==3.3.3; extra == "development"
Requires-Dist: tomli; python_version < "3.11" and extra == "development"
Requires-Dist: pre-commit==4.0.1; extra == "development"
Provides-Extra: docs
Requires-Dist: sphinx==8.1.3; extra == "docs"
Requires-Dist: sphinx-argparse==0.5.2; extra == "docs"
Requires-Dist: plantweb==1.3.0; extra == "docs"
Requires-Dist: sphinxcontrib.asciinema==0.3.8; extra == "docs"
Requires-Dist: sphinx_design==0.6.1; extra == "docs"
Provides-Extra: test
Requires-Dist: pytest==8.3.4; extra == "test"
Requires-Dist: pytest-cov==6.0.0; extra == "test"
Requires-Dist: behave==1.2.6; extra == "test"
Provides-Extra: casts
Requires-Dist: asciinema==2.4.0; extra == "casts"

![](doc/images/dfetch_header.png)
[![](https://codescene.io/projects/10989/status-badges/code-health)](https://codescene.io/projects/10989)
[![](https://codescene.io/projects/10989/status-badges/system-mastery)](https://codescene.io/projects/10989)
[![Codacy Badge](https://api.codacy.com/project/badge/Grade/431474d43db0420a92ebc10c1886df8d)](https://app.codacy.com/gh/dfetch-org/dfetch?utm_source=github.com&utm_medium=referral&utm_content=dfetch-org/dfetch&utm_campaign=Badge_Grade)
[![Codacy Badge](https://app.codacy.com/project/badge/Coverage/503c21c8e46b4baca0b4519bcc9fd51e)](https://www.codacy.com/gh/dfetch-org/dfetch/dashboard?utm_source=github.com&utm_medium=referral&utm_content=dfetch-org/dfetch&utm_campaign=Badge_Coverage)
[![Documentation Status](https://readthedocs.org/projects/dfetch/badge/?version=latest)](https://dfetch.readthedocs.io/en/latest/?badge=latest)
[![Build](https://github.com/dfetch-org/dfetch/workflows/Test/badge.svg)](https://github.com/dfetch-org/dfetch/actions)
[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
[![GitHub](https://img.shields.io/github/license/dfetch-org/dfetch)](https://github.com/dfetch-org/dfetch/blob/main/LICENSE)
[![Gitter](https://badges.gitter.im/dfetch-org/community.svg)](https://gitter.im/dfetch-org/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
[![Libraries.io dependency status for GitHub repo](https://img.shields.io/librariesio/github/dfetch-org/dfetch)](https://libraries.io/github/dfetch-org/dfetch)
![Maintenance](https://img.shields.io/maintenance/yes/2025)
[![GitHub issues](https://img.shields.io/github/issues/dfetch-org/dfetch)](https://github.com/dfetch-org/dfetch/issues)
![PyPI - Python Version](https://img.shields.io/pypi/pyversions/dfetch)
[![PyPI](https://img.shields.io/pypi/v/dfetch)](https://pypi.org/project/dfetch/)
[![Contribute with Codespaces](https://img.shields.io/static/v1?label=Codespaces&message=Open&color=blue)](https://codespaces.new/dfetch-org/dfetch)


**DFetch can manage dependencies**

We needed a dependency manager that was flexible enough to retrieve dependencies as plain text
from various sources. `svn externals`, `git submodules` and `git subtrees` solve a similar
problem, but not in a VCS agnostic way or completely user friendly way.
We want self-contained code repositories without any hassle for end-users.
Dfetch must promote upstreaming changes, but allow for local customizations.
The problem is described thoroughly [here](https://embeddedartistry.com/blog/2020/06/22/qa-on-managing-external-dependencies/) and sometimes
is also known as [*vendoring*](https://stackoverflow.com/questions/26217488/what-is-vendoring).

Other tools that do similar things are ``Zephyr's West``, ``CMake ExternalProject`` and other meta tools.
See [alternatives](https://dfetch.readthedocs.io/en/latest/alternatives.html) for a complete list.

[**Getting started**](https://dfetch.readthedocs.io/en/latest/getting_started.html) |
[**Manual**](https://dfetch.readthedocs.io/en/latest/manual.html) |
[**Troubleshooting**](https://dfetch.readthedocs.io/en/latest/troubleshooting.html)  |
[**Contributing**](https://dfetch.readthedocs.io/en/latest/contributing.html)

## Install

### Stable
```bash
pip install dfetch
```

### latest version
```bash
pip install https://github.com/dfetch-org/dfetch/archive/main.zip
```
