Metadata-Version: 2.4
Name: dompk
Version: 0.0.2
Summary: Dompack - curated domain-based Python tech stack installer
Author-email: Veeresh Hanni <veereshhanni347@gmail.com>
License: MIT License
        
        Copyright (c) 2025 Veeresh Hanni
        
        Permission is hereby granted, free of charge, to any person obtaining a copy
        of this software and associated documentation files (the "Software"), to deal
        in the Software without restriction, including without limitation the rights
        to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
        copies of the Software, and to permit persons to whom the Software is
        furnished to do so, subject to the following conditions:
        
        The above copyright notice and this permission notice shall be included in all
        copies or substantial portions of the Software.
        
        THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
        IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
        FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
        AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
        LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
        OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
        SOFTWARE.
        
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Requires-Python: >=3.8
Description-Content-Type: text/markdown
License-File: LICENSE
Provides-Extra: db
Requires-Dist: psycopg2-binary; extra == "db"
Requires-Dist: pymysql; extra == "db"
Requires-Dist: pymongo; extra == "db"
Requires-Dist: motor; extra == "db"
Requires-Dist: redis; extra == "db"
Provides-Extra: da
Requires-Dist: psycopg2-binary; extra == "da"
Requires-Dist: pymysql; extra == "da"
Requires-Dist: pymongo; extra == "da"
Requires-Dist: motor; extra == "da"
Requires-Dist: redis; extra == "da"
Provides-Extra: ds
Requires-Dist: numpy; extra == "ds"
Requires-Dist: pandas; extra == "ds"
Requires-Dist: matplotlib; extra == "ds"
Requires-Dist: scipy; extra == "ds"
Requires-Dist: statsmodels; extra == "ds"
Provides-Extra: ml
Requires-Dist: numpy; extra == "ml"
Requires-Dist: pandas; extra == "ml"
Requires-Dist: scikit-learn; extra == "ml"
Requires-Dist: joblib; extra == "ml"
Requires-Dist: matplotlib; extra == "ml"
Provides-Extra: ai
Requires-Dist: transformers; extra == "ai"
Requires-Dist: sentencepiece; extra == "ai"
Requires-Dist: tokenizers; extra == "ai"
Provides-Extra: dl
Requires-Dist: torch; (python_version >= "3.9" and python_version < "3.14") and extra == "dl"
Requires-Dist: torchvision; (python_version >= "3.9" and python_version < "3.14") and extra == "dl"
Provides-Extra: cv
Requires-Dist: opencv-python; platform_python_implementation == "CPython" and extra == "cv"
Requires-Dist: scikit-image; extra == "cv"
Requires-Dist: pillow; extra == "cv"
Provides-Extra: gui
Requires-Dist: PyQt5; python_version < "3.13" and extra == "gui"
Requires-Dist: kivy; python_version < "3.13" and extra == "gui"
Provides-Extra: av
Requires-Dist: librosa; extra == "av"
Requires-Dist: moviepy; extra == "av"
Requires-Dist: ffmpeg-python; extra == "av"
Provides-Extra: web
Requires-Dist: requests; extra == "web"
Requires-Dist: httpx; extra == "web"
Requires-Dist: beautifulsoup4; extra == "web"
Requires-Dist: lxml; extra == "web"
Provides-Extra: common
Requires-Dist: requests; extra == "common"
Requires-Dist: httpx; extra == "common"
Requires-Dist: python-dotenv; extra == "common"
Requires-Dist: pydantic; extra == "common"
Requires-Dist: rich; extra == "common"
Requires-Dist: loguru; extra == "common"
Provides-Extra: core
Requires-Dist: requests; extra == "core"
Requires-Dist: httpx; extra == "core"
Requires-Dist: python-dotenv; extra == "core"
Requires-Dist: pydantic; extra == "core"
Requires-Dist: rich; extra == "core"
Requires-Dist: loguru; extra == "core"
Provides-Extra: base
Requires-Dist: requests; extra == "base"
Requires-Dist: httpx; extra == "base"
Requires-Dist: python-dotenv; extra == "base"
Requires-Dist: pydantic; extra == "base"
Requires-Dist: rich; extra == "base"
Requires-Dist: loguru; extra == "base"
Provides-Extra: bootstrap
Requires-Dist: pip; extra == "bootstrap"
Requires-Dist: setuptools; extra == "bootstrap"
Requires-Dist: wheel; extra == "bootstrap"
Requires-Dist: build; extra == "bootstrap"
Requires-Dist: packaging; extra == "bootstrap"
Requires-Dist: virtualenv; extra == "bootstrap"
Requires-Dist: pip-tools; extra == "bootstrap"
Requires-Dist: twine; extra == "bootstrap"
Provides-Extra: boot
Requires-Dist: pip; extra == "boot"
Requires-Dist: setuptools; extra == "boot"
Requires-Dist: wheel; extra == "boot"
Requires-Dist: build; extra == "boot"
Requires-Dist: packaging; extra == "boot"
Requires-Dist: virtualenv; extra == "boot"
Requires-Dist: pip-tools; extra == "boot"
Requires-Dist: twine; extra == "boot"
Provides-Extra: pytools
Requires-Dist: pip; extra == "pytools"
Requires-Dist: setuptools; extra == "pytools"
Requires-Dist: wheel; extra == "pytools"
Requires-Dist: build; extra == "pytools"
Requires-Dist: packaging; extra == "pytools"
Requires-Dist: virtualenv; extra == "pytools"
Requires-Dist: pip-tools; extra == "pytools"
Requires-Dist: twine; extra == "pytools"
Provides-Extra: fa
Requires-Dist: fastapi; extra == "fa"
Requires-Dist: uvicorn[standard]; extra == "fa"
Requires-Dist: pydantic; extra == "fa"
Requires-Dist: python-dotenv; extra == "fa"
Requires-Dist: python-multipart; extra == "fa"
Requires-Dist: jinja2; extra == "fa"
Requires-Dist: sqlalchemy; extra == "fa"
Provides-Extra: fastapi
Requires-Dist: fastapi; extra == "fastapi"
Requires-Dist: uvicorn[standard]; extra == "fastapi"
Requires-Dist: pydantic; extra == "fastapi"
Requires-Dist: python-dotenv; extra == "fastapi"
Requires-Dist: python-multipart; extra == "fastapi"
Requires-Dist: jinja2; extra == "fastapi"
Requires-Dist: sqlalchemy; extra == "fastapi"
Provides-Extra: fl
Requires-Dist: Flask; extra == "fl"
Requires-Dist: Flask-CORS; extra == "fl"
Requires-Dist: Flask-RESTful; extra == "fl"
Requires-Dist: Flask-JWT-Extended; extra == "fl"
Requires-Dist: Flask-Migrate; extra == "fl"
Provides-Extra: flask
Requires-Dist: Flask; extra == "flask"
Requires-Dist: Flask-CORS; extra == "flask"
Requires-Dist: Flask-RESTful; extra == "flask"
Requires-Dist: Flask-JWT-Extended; extra == "flask"
Requires-Dist: Flask-Migrate; extra == "flask"
Provides-Extra: dj
Requires-Dist: Django; extra == "dj"
Requires-Dist: djangorestframework; extra == "dj"
Requires-Dist: django-cors-headers; extra == "dj"
Requires-Dist: django-environ; extra == "dj"
Requires-Dist: whitenoise; extra == "dj"
Provides-Extra: django
Requires-Dist: Django; extra == "django"
Requires-Dist: djangorestframework; extra == "django"
Requires-Dist: django-cors-headers; extra == "django"
Requires-Dist: django-environ; extra == "django"
Requires-Dist: whitenoise; extra == "django"
Provides-Extra: net
Requires-Dist: aiohttp; extra == "net"
Requires-Dist: websockets; extra == "net"
Requires-Dist: dnspython; extra == "net"
Requires-Dist: paramiko; extra == "net"
Provides-Extra: security
Requires-Dist: cryptography; extra == "security"
Requires-Dist: PyJWT; extra == "security"
Requires-Dist: passlib[bcrypt]; extra == "security"
Requires-Dist: pycryptodome; extra == "security"
Provides-Extra: sec
Requires-Dist: cryptography; extra == "sec"
Requires-Dist: PyJWT; extra == "sec"
Requires-Dist: passlib[bcrypt]; extra == "sec"
Requires-Dist: pycryptodome; extra == "sec"
Provides-Extra: auth
Requires-Dist: cryptography; extra == "auth"
Requires-Dist: PyJWT; extra == "auth"
Requires-Dist: passlib[bcrypt]; extra == "auth"
Requires-Dist: pycryptodome; extra == "auth"
Provides-Extra: cyber
Requires-Dist: cryptography; extra == "cyber"
Requires-Dist: PyJWT; extra == "cyber"
Requires-Dist: passlib[bcrypt]; extra == "cyber"
Requires-Dist: pycryptodome; extra == "cyber"
Provides-Extra: cybersec
Requires-Dist: cryptography; extra == "cybersec"
Requires-Dist: PyJWT; extra == "cybersec"
Requires-Dist: passlib[bcrypt]; extra == "cybersec"
Requires-Dist: pycryptodome; extra == "cybersec"
Provides-Extra: devops
Requires-Dist: docker; extra == "devops"
Requires-Dist: docker-compose; extra == "devops"
Requires-Dist: ansible; extra == "devops"
Provides-Extra: testing
Requires-Dist: pytest; extra == "testing"
Requires-Dist: pytest-cov; extra == "testing"
Requires-Dist: black; extra == "testing"
Requires-Dist: flake8; extra == "testing"
Requires-Dist: isort; extra == "testing"
Requires-Dist: mypy; extra == "testing"
Provides-Extra: file
Requires-Dist: openpyxl; extra == "file"
Requires-Dist: python-docx; extra == "file"
Requires-Dist: pypdf2; extra == "file"
Provides-Extra: utils
Requires-Dist: python-dotenv; extra == "utils"
Requires-Dist: loguru; extra == "utils"
Requires-Dist: rich; extra == "utils"
Provides-Extra: fullstack
Requires-Dist: fastapi; extra == "fullstack"
Requires-Dist: uvicorn[standard]; extra == "fullstack"
Requires-Dist: Django; extra == "fullstack"
Requires-Dist: Flask; extra == "fullstack"
Requires-Dist: sqlalchemy; extra == "fullstack"
Requires-Dist: psycopg2-binary; extra == "fullstack"
Requires-Dist: pymysql; extra == "fullstack"
Requires-Dist: pymongo; extra == "fullstack"
Provides-Extra: all
Requires-Dist: aiohttp; extra == "all"
Requires-Dist: ansible; extra == "all"
Requires-Dist: beautifulsoup4; extra == "all"
Requires-Dist: black; extra == "all"
Requires-Dist: build; extra == "all"
Requires-Dist: cryptography; extra == "all"
Requires-Dist: Django; extra == "all"
Requires-Dist: django-cors-headers; extra == "all"
Requires-Dist: django-environ; extra == "all"
Requires-Dist: dnspython; extra == "all"
Requires-Dist: docker; extra == "all"
Requires-Dist: docker-compose; extra == "all"
Requires-Dist: fastapi; extra == "all"
Requires-Dist: ffmpeg-python; extra == "all"
Requires-Dist: flake8; extra == "all"
Requires-Dist: Flask; extra == "all"
Requires-Dist: Flask-CORS; extra == "all"
Requires-Dist: Flask-JWT-Extended; extra == "all"
Requires-Dist: Flask-Migrate; extra == "all"
Requires-Dist: Flask-RESTful; extra == "all"
Requires-Dist: httpx; extra == "all"
Requires-Dist: isort; extra == "all"
Requires-Dist: jinja2; extra == "all"
Requires-Dist: joblib; extra == "all"
Requires-Dist: kivy; python_version < "3.13" and extra == "all"
Requires-Dist: librosa; extra == "all"
Requires-Dist: loguru; extra == "all"
Requires-Dist: lxml; extra == "all"
Requires-Dist: matplotlib; extra == "all"
Requires-Dist: motor; extra == "all"
Requires-Dist: moviepy; extra == "all"
Requires-Dist: mypy; extra == "all"
Requires-Dist: numpy; extra == "all"
Requires-Dist: opencv-python; platform_python_implementation == "CPython" and extra == "all"
Requires-Dist: openpyxl; extra == "all"
Requires-Dist: pandas; extra == "all"
Requires-Dist: paramiko; extra == "all"
Requires-Dist: passlib[bcrypt]; extra == "all"
Requires-Dist: packaging; extra == "all"
Requires-Dist: pillow; extra == "all"
Requires-Dist: psycopg2-binary; extra == "all"
Requires-Dist: pydantic; extra == "all"
Requires-Dist: pycryptodome; extra == "all"
Requires-Dist: PyJWT; extra == "all"
Requires-Dist: pymongo; extra == "all"
Requires-Dist: pymysql; extra == "all"
Requires-Dist: pypdf2; extra == "all"
Requires-Dist: PyQt5; python_version < "3.13" and extra == "all"
Requires-Dist: pytest; extra == "all"
Requires-Dist: pytest-cov; extra == "all"
Requires-Dist: pip; extra == "all"
Requires-Dist: pip-tools; extra == "all"
Requires-Dist: python-docx; extra == "all"
Requires-Dist: python-dotenv; extra == "all"
Requires-Dist: python-multipart; extra == "all"
Requires-Dist: redis; extra == "all"
Requires-Dist: requests; extra == "all"
Requires-Dist: rich; extra == "all"
Requires-Dist: scikit-image; extra == "all"
Requires-Dist: scikit-learn; extra == "all"
Requires-Dist: scipy; extra == "all"
Requires-Dist: sentencepiece; extra == "all"
Requires-Dist: setuptools; extra == "all"
Requires-Dist: sqlalchemy; extra == "all"
Requires-Dist: statsmodels; extra == "all"
Requires-Dist: tokenizers; extra == "all"
Requires-Dist: torch; (python_version >= "3.9" and python_version < "3.14") and extra == "all"
Requires-Dist: torchvision; (python_version >= "3.9" and python_version < "3.14") and extra == "all"
Requires-Dist: transformers; extra == "all"
Requires-Dist: uvicorn[standard]; extra == "all"
Requires-Dist: virtualenv; extra == "all"
Requires-Dist: websockets; extra == "all"
Requires-Dist: whitenoise; extra == "all"
Requires-Dist: wheel; extra == "all"
Requires-Dist: twine; extra == "all"
Dynamic: license-file

# Dompack

Domain-based Python tech stack installer.

Install one package and quickly set up bundles for web, ML, AI, databases, security, and more.

## Install

```bash
pip install dompack
```

Commands after install:

```bash
dompack --version
dompk --version
```

`dompack` and `dompk` both run the same CLI.

## Quick Usage

List bundles:

```bash
dompack list
```

Install a bundle:

```bash
dompack install <bundle>
```

Full developer setup:

```bash
dompack install pydev
```

Equivalent with alias:

```bash
dompk install pydev
```

## Installer Backends

Auto (default, prefers `uv` if available):

```bash
dompack install web
```

Force `uv pip`:

```bash
dompack --installer uv install web
```

Force `pip`:

```bash
dompack --installer pip install web
```

## Linux (Debian/RPM) PEP 668

If system Python is externally managed, Dompack automatically retries installs in a local virtual environment (`.venv` if valid, otherwise `.dompack-venv`).

Advanced override (system Python):

```bash
dompack --break-system-packages install web
```

## Bundle Aliases

- Core aliases: `common`, `core`, `base`
- Full setup aliases: `all`, `pydev`, `dev`, `setup`, `python`
- Python tooling aliases: `bootstrap`, `boot`, `pytools`

Examples:

```bash
dompack install fa
dompack install dj
dompack install ml
dompack install security
dompack install bootstrap
```

## Other Commands

```bash
dompack upgrade <bundle>
dompack search <keyword>
dompack doctor
dompack update-self
dompack req <bundle>
dompack create-bundle <name> <pkg1> <pkg2> ...
```

## Notes

- Package name on PyPI: `dompack`
- Console commands: `dompack`, `dompk`
- Current release: `1.1.2`

## License

MIT
