|
| 1 | + |
| 2 | +--- |
| 3 | + |
| 4 | +# omnipkg: The Intelligent Python Package Manager |
| 5 | +> One environment. Infinite versions. Zero conflicts. |
| 6 | +
|
| 7 | +<p align="center"> |
| 8 | + <a href="https://github.com/omnipkg/omnipkg/actions/workflows/test.yml"> |
| 9 | + <img src="https://img.shields.io/github/actions/workflow/status/omnipkg/omnipkg/test.yml?branch=main" alt="Build Status"> |
| 10 | + </a> |
| 11 | + <a href="https://pypi.org/project/omnipkg/"> |
| 12 | + <img src="https://img.shields.io/pypi/v/omnipkg.svg" alt="PyPI version"> |
| 13 | + </a> |
| 14 | + <a href="https://www.gnu.org/licenses/agpl-3.0"> |
| 15 | + <img src="https://img.shields.io/badge/License-AGPLv3-red.svg" alt="License: AGPLv3"> |
| 16 | + </a> |
| 17 | + <a href="https://github.com/omnipkg/omnipkg/actions/workflows/security_audit.yml"> |
| 18 | + <img src="https://img.shields.io/github/actions/workflow/status/omnipkg/omnipkg/security_audit.yml?branch=main" alt="Security Audit"> |
| 19 | + </a> |
| 20 | +</p> |
| 21 | + |
| 22 | +--- |
| 23 | + |
| 24 | +`omnipkg` lets you install *any version* of *any package* without breaking your environment, downgrading dependencies, or needing Conda, Docker, or `pipx`. **Dependency hell? Obliterated.** |
| 25 | + |
| 26 | +--- |
| 27 | +## See It to Believe It (30 Second Demo) |
| 28 | + |
| 29 | +<!-- A GIF is the best format for this. It shows the tool in action without taking up a ton of space. --> |
| 30 | + |
| 31 | +*This shows `omnipkg install old-package`, downgrade protection activating, and `omnipkg status` confirming both versions coexist.* |
| 32 | + |
| 33 | +--- |
| 34 | + |
| 35 | +## 🚀 Features |
| 36 | + |
| 37 | +- 🛡️ **Downgrade Protection**: Stops `pip` from nuking your environment by isolating conflicting versions into protected "bubbles." |
| 38 | +- 💾 **Intelligent Deduplication**: Saves up to 60% disk space on bubbled packages while keeping native C extensions stable. |
| 39 | +- 🧠 **Redis-Backed Knowledge Base**: Lightning-fast lookups for all package versions, dependencies, and security info. |
| 40 | +- 🔀 **Runtime Version Switching**: Activate any bubbled package version on the fly, even within the same script. |
| 41 | +- 🧪 **Battle-Tested**: Proven to handle massive environments (520+ packages, 95+ bubbles, 15.4GB+) without flinching. |
| 42 | + |
| 43 | +--- |
| 44 | + |
| 45 | +## How Is This Possible? |
| 46 | + |
| 47 | +When a downgrade is detected, `omnipkg` performs surgery: |
| 48 | +1. **Intercepts** the request. |
| 49 | +2. **Installs** the conflicting version and its entire dependency tree into a temporary, isolated location. |
| 50 | +3. **Creates** a space-efficient, deduplicated "bubble" in `.omnipkg_versions`. |
| 51 | +4. **Restores** the original package in your main environment. |
| 52 | + |
| 53 | +The result: a perfectly stable global environment, with every version you've ever needed on standby. |
| 54 | + |
| 55 | +<details> |
| 56 | +<summary><strong>🔬 Click for a Real-World Example: Downgrading PyTorch</strong></summary> |
| 57 | + |
| 58 | +```bash |
| 59 | +# User wants to install an older torch version |
| 60 | +$ omnipkg install torch==2.7.0 |
| 61 | + |
| 62 | +# ... (omnipkg detects the downgrade) ... |
| 63 | +🛡️ DOWNGRADE PROTECTION ACTIVATED! |
| 64 | +-> Fixing downgrade: torch from v2.7.1 to v2.7.0 |
| 65 | +🫧 Creating isolated bubble for torch v2.7.0 |
| 66 | +✅ Success: Dependencies resolved via PyPI API. |
| 67 | +🧹 Creating deduplicated bubble... |
| 68 | +⚠️ Disabling deduplication for native package: torch |
| 69 | +✅ Bubble created: 16241 files copied, 3211 deduplicated. |
| 70 | +📊 Space efficiency: 16.5% saved. |
| 71 | +🔄 Restoring ‘torch’ to safe version v2.7.1 in main environment… |
| 72 | + |
| 73 | +✅ Environment protection complete! |
| 74 | +``` |
| 75 | +</details> |
| 76 | + |
| 77 | +--- |
| 78 | + |
| 79 | +## Why Other Tools Fail |
| 80 | + |
| 81 | +| Tool | The Task: `install old-conflicting-package` | Result | |
| 82 | +|---------------|---------------------------------------------|---------------------------------------| |
| 83 | +| `pip` | ❌ | `ERROR: Cannot uninstall...` | |
| 84 | +| `conda` | ⏳ | `Solving environment...` (for hours) | |
| 85 | +| `poetry` | 💥 | `SolverProblemError` | |
| 86 | +| `uv` | 🚫 | `No solution found for the request` | |
| 87 | +| **`omnipkg`** | ✅ | **`DOWNGRADE PROTECTION ACTIVATED!`** | |
| 88 | + |
| 89 | +--- |
| 90 | + |
| 91 | +## 📜 Licensing |
| 92 | + |
| 93 | +`omnipkg` is available under a dual-license model to suit different needs. |
| 94 | + |
| 95 | +- **Community Edition (AGPLv3):** Perfect for individual developers, open-source projects, and academic use. If you use `omnipkg` in a project that is also open-source under a compatible license, you're good to go. The source code is available in this repository under the [GNU AGPLv3](LICENSE). |
| 96 | + |
| 97 | +- **Commercial License:** Required for use in closed-source commercial software, proprietary systems, or for any organization that cannot comply with the terms of the AGPLv3. This license allows you to integrate `omnipkg` without the obligation to open-source your own code. |
| 98 | + |
| 99 | + → **To inquire about a commercial license, please contact:** [**omnipkg@proton.me**](mailto:omnipkg@proton.me) |
0 commit comments