Skip to main content

Scan and repair conda/mamba/micromamba environments with mixed conda/pip installs.

Project description

🩺 EnvRepair CI

Fixing broken Python environments – safely, transparently, reproducibly

EnvRepair icon

EnvRepair is a practical repair tool for the messy reality of Python environments:
Conda / Mamba / Micromamba mixed with pip, plus plain venv / virtualenv.

Instead of starting over (again), EnvRepair helps you understand what’s broken, why it’s broken, and fix it safely – with snapshots and rollback support, so you’re never locked in.


🤕 Why EnvRepair Exists

If you’ve ever seen things like:

  • duplicate .dist-info folders
  • mysterious .pyd conflicts on Windows
  • conda-meta JSON files that suddenly break tools like PyInstaller
  • environments that are “inconsistent” but still half-working
  • pip + conda silently stepping on each other’s toes

…then EnvRepair is for you.

It doesn’t try to replace conda or pip.
It steps in after things already went wrong.


✨ What EnvRepair Can Do

🔍 Diagnose

  • Detect duplicates and leftovers (.dist-info, stale artifacts, some Windows .pyd duplicates).
  • Find corrupted or incomplete conda-meta entries.
  • Detect pip/conda case-sensitivity conflicts.

🛠️ Repair (carefully!)

  • Repair mixed conda + pip installs using the right tool.
  • Reinstall broken packages with source awareness.
  • “Adopt” pip packages into conda where possible (--adopt-pip).
  • Handle plain venv / virtualenv setups (pip-only mode).

🛟 Safety First

  • Automatic rescue snapshots before any destructive action.
  • Graceful recovery after Ctrl+C.
  • Clear prompts instead of silent force-fixes.

🧰 Requirements

  • Windows, Linux, or macOS.
  • mamba in PATH for conda-style envs (preferred). conda/micromamba also work in many cases.
  • Python available in the target environment.

🚀 Quick Start

All examples below use Windows cmd.exe syntax (.bat blocks).
Adjust paths/shells as needed for Linux/macOS.

Basic scan (auto-discovers conda envs):

python env_repair.py

Install as a CLI (editable):

pip install -e .
env-repair --help

Install from local checkout (non-editable):

pip install .

🔁 Common Workflows

Fix base:

python env_repair.py --env base --fix

Fix a plain venv (pip-only):

python env_repair.py --env .venv --fix

Same via installed CLI:

env-repair --env base --fix

Adopt pip packages into conda (where possible):

python env_repair.py --env base --fix --adopt-pip

Verify imports (and fix what can be fixed):

python env_repair.py verify-imports --env base --full --fix

⏪ Rollback & Rebuild

Rollback to previous conda revision:

env-repair rollback --env base --to prev

Rollback without prompt:

env-repair rollback --env base --to prev -y

Rebuild into a new env (name):

env-repair rebuild --env base --to base-rebuilt --verify

Rebuild into a new env (path):

env-repair rebuild --env base --to C:\temp\base-rebuilt --verify

🧪 Advanced Diagnostics

Diagnose a ClobberError from a logfile:

env-repair diagnose-clobber --env base --logfile clobber.txt

Diagnose / fix “inconsistent” env:

env-repair diagnose-inconsistent --env base
env-repair fix-inconsistent --env base --level safe

Cache check / fix:

env-repair cache-check
env-repair cache-fix --level safe

SSL diagnosis:

env-repair diagnose-ssl --base
env-repair diagnose-ssl --env base

Create a conda-style snapshot (YAML):

python env_repair.py --env base --snapshot snapshots\base.yaml

Debug output:

python env_repair.py --env base --fix --adopt-pip --debug

🛟 Safety Net (Ctrl+C / Rescue)

  • When you run with --fix, EnvRepair creates a rescue snapshot under:
    .env_repair\snapshots\...
    
  • If you abort during a pip/mamba/conda step, EnvRepair will prompt:
    • r restore from snapshot
    • c continue (skip)
    • a abort (default)
  • A .env_repair\state.json file records progress so you can inspect what happened and re-run later.

🔎 Import Verification (verify-imports)

EnvRepair can scan installed distributions and run python -c "import <name>" for their top-level modules.

Full scan + auto-fix (recommended when an env is “mostly working but randomly broken”):

python env_repair.py verify-imports --env base --full --fix --debug

Notes:

  • Repairs use batched conda/mamba operations (no slow one-by-one reinstalls).
  • If the solver fails for a specific package, EnvRepair retries the batch without the offending spec and remembers it in:
    • .env_repair\verify_imports_blacklist.json
  • Platform-only modules are skipped (e.g. sh on Windows, ptyprocess missing fcntl on Windows).

🧑‍💻 Development

Run tests:

python -m unittest discover -s tests -p "test_*.py"

JSON output:

python env_repair.py --env base --json

📝 Notes

  • --adopt-pip installs only mapped PyPI packages.
  • --adopt-pip is conda-only; for plain venvs it is ignored.
  • After successful adoption, env-repair uninstalls the pip version by default; use --keep-pip to skip.
  • For alias-like mappings (e.g. pip msgpack → conda msgpack-python), pip is only removed if both versions match.
  • Channels are loaded from .condarc first, then defaults and anaconda unless disabled.
  • --debug prints the exact external command lines as [cmd] ... (mamba/conda/pip), and streams live output to keep long operations transparent.

📁 Files

  • env_repair.py – CLI shim (kept for convenience).
  • env_repair/ – actual implementation.
  • docs/ – design notes, feature specs, and roadmaps.

📦 Releases

PyPI releases are automated via GitHub Actions (Trusted Publishing) on tags:

  • vX.Y.Z.github/workflows/release-pypi.yml

conda-forge publishing is done via a feedstock (standard conda-forge process). For details see:

  • docs/releasing.md

Local conda recipe (for testing) lives in:

  • conda.recipe/

❤️ Philosophy

EnvRepair is opinionated, but cautious.
It prefers understanding and repair over brute-force reinstallation.

If you’ve ever said “I’ll just recreate the environment…”
EnvRepair is here to save you that hour.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

env_repair-0.2.2.tar.gz (52.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

env_repair-0.2.2-py3-none-any.whl (50.7 kB view details)

Uploaded Python 3

File details

Details for the file env_repair-0.2.2.tar.gz.

File metadata

  • Download URL: env_repair-0.2.2.tar.gz
  • Upload date:
  • Size: 52.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for env_repair-0.2.2.tar.gz
Algorithm Hash digest
SHA256 a86b17d220e6a3545a39c5c1e3aabe80a6074bdd0a380b8e1ead205cb6679c66
MD5 416786ef0690285a191d82e810849a65
BLAKE2b-256 ed2ca81a6e0128445b3782fb2aeef7e3fafe5cf0df2be038265f3d101f58e2f2

See more details on using hashes here.

Provenance

The following attestation bundles were made for env_repair-0.2.2.tar.gz:

Publisher: release-pypi.yml on noragen/env-repair

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file env_repair-0.2.2-py3-none-any.whl.

File metadata

  • Download URL: env_repair-0.2.2-py3-none-any.whl
  • Upload date:
  • Size: 50.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for env_repair-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 aab3a0a4b38e25c0873c8f46fad31a4e0f205c26d9f16f520889bc4d8bec9da7
MD5 3692519b1f297fbb2f1a6f69d6255cad
BLAKE2b-256 bb66e92ea90c17eaa35be294b74ce14fea329fe3e9e9aba43ed20e4e00ad2f29

See more details on using hashes here.

Provenance

The following attestation bundles were made for env_repair-0.2.2-py3-none-any.whl:

Publisher: release-pypi.yml on noragen/env-repair

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page