reqsync
Keep your requirements.txt (and included requirement files) synced to what is actually installed — fast, safe, and low-effort.
Built for the "I just want my requirements file updated" workflow.
What reqsync is
reqsync reads your active environment and rewrites requirement specifiers so files reflect what you're currently running.
- Preserves comments, extras, markers, and line endings.
- Follows
-rincludes. - Skips
-cconstraints unless you opt in. - Uses backups + atomic writes.
What reqsync is not
- Not a lockfile manager.
- Not a dependency solver replacement.
- Not a hash-regenerator for
--hashpinned lines.
Install
pip install reqsync
Optional extras:
pip install "reqsync[mcp]" # built-in MCP server support
pip install "reqsync[pretty]" # optional pretty ecosystem deps
Quick start
# 1) Preview only (no writes)
reqsync run --no-upgrade --dry-run --show-diff
# 2) Apply updates
reqsync run --show-diff
# 3) CI drift gate (fails if changes needed)
reqsync run --check --no-upgrade
Before / after example
# before
requests>=2.30.0
pydantic>=2.5.0
# after (installed env has requests 2.32.3, pydantic 2.7.0)
requests>=2.32.3
pydantic>=2.7.0
Terminal demos
Quick sync preview (--dry-run --show-diff)
CI check mode (--check --no-upgrade)
Integration Guide
Standalone usage
reqsync run --path requirements.txt
reqsync run --path requirements/base.txt --follow-includes
Agentic / MCP usage
# MCP server (stdio)
reqsync mcp
# or dedicated entrypoint
reqsync-mcp
Python API (tool-friendly)
from reqsync.api import run_sync_payload
result = run_sync_payload(
{
"path": "requirements.txt",
"dry_run": True,
"no_upgrade": True,
"show_diff": True,
"policy": "lower-bound",
}
)
print(result["changed"])
print(result["changes"])
Core commands
reqsync run [OPTIONS]
reqsync help [all|run|version|mcp]
reqsync --version
reqsync version
reqsync mcp [--transport stdio|sse|streamable-http]
Most-used options:
--path--no-upgrade--dry-run--check--show-diff--output human|json|both--json-report <file>--backup-keep-last <n>(default5)--policy lower-bound|floor-only|floor-and-cap|update-in-place
Help discoverability:
reqsync help all
reqsync run --help
reqsync mcp --help
Common workflows
# quick local refresh
reqsync run --show-diff
# no network / no pip upgrade
reqsync run --no-upgrade --dry-run --show-diff
# machine output for tools/models
reqsync run --no-upgrade --dry-run --output json
# update constraints too
reqsync run --path requirements/base.txt --update-constraints
Output shape (for models/tools)
--output json or Python API returns structured keys:
changedfiles(withrole,changed,change_count)changes(file,package,installed_version,old_line,new_line)backup_pathsdiff
Safety model
- Blocks outside virtualenv unless
--system-ok. - Blocks hash-pinned files unless
--allow-hashes. - Optional dirty-repo guard via
--allow-dirty. - Lock + backup + atomic write for safer file operations.
- Timestamped backups are auto-pruned (keep latest 5 per file by default).
Docs
Author & Links
Created by: Roy Dawson IV
GitHub: https://github.com/imyourboyroy
PyPi: https://pypi.org/user/ImYourBoyRoy/
Project repo: https://github.com/ImYourBoyRoy/reqsync
License
MIT — see LICENSE.
Metadata
Release files for reqsync 0.1.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| reqsync-0.1.5.tar.gz | 28.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| reqsync-0.1.5-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 55.4 kB
Release files / reqsync-0.1.5.tar.gz
| Download URL | reqsync-0.1.5.tar.gz |
|---|---|
| Size | 28.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
05320ac484ec746382c1115dafcc6169fb2a170cd5a5eebf6b2cdf189308493d
|
|
BLAKE2b-256 checksum How to use checksums |
dcc798b3dbaae2fa90bf9be739bdd119ab8e6bcd3e9e38c1bc81b6f87c137828
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Feb 23, 2026.
Transparency logRelease files / reqsync-0.1.5-py3-none-any.whl
| Download URL | reqsync-0.1.5-py3-none-any.whl |
|---|---|
| Size | 27.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b9780f49eb63024e353af5df78d554747dd413640deed02d95e4b32451535a48
|
|
BLAKE2b-256 checksum How to use checksums |
6a8c4624c124bb7cf65119c64ed6d82c93355e8f395fdf7e2afb640c36d38086
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Feb 23, 2026.
Transparency log