# LazyPip 🐍⚡
A **lazygit-style TUI** for Python package management using pip. Navigate, install, upgrade, and manage your Python packages with an intuitive terminal interface.
[](https://python.org)
[](https://www.gnu.org/licenses/gpl-3.0.en.html)
[](https://github.com/psf/black)
## 🚀 Features
- **Intuitive TUI** - Navigate packages with vim-like keybindings
- **Real-time Package Status** - See installed, outdated, and available packages
- **Quick Actions** - Install, upgrade, uninstall with single keystrokes
- **Package Details** - View comprehensive package information
- **Bulk Operations** - Upgrade all outdated packages at once
- **Requirements Management** - Install from requirements.txt
- **Search & Filter** - Find packages quickly
- **Keyboard-First** - Designed for efficiency and speed
## Example
```
┌─ LazyPip - Python Package Manager ─────────────────────────────┐
│ Installed (142) │ Package Details │
├────────────────────────┼───────────────────────────────────────┤
│ Status │ Package │ requests ✓ │
│ ✓ │ requests │ │
│ ↑ │ numpy │ Version: 2.31.0 │
│ ✓ │ flask │ Latest: 2.31.0 │
│ ↑ │ django │ │
│ ✓ │ pytest │ Summary: Python HTTP for Humans. │
│ │ │ │
│ │ │ Location: /usr/local/lib/python3.11 │
│ │ │ │
│ │ │ Requires: │
│ │ │ • urllib3>=1.21.1,<3 │
│ │ │ • idna>=2.5,<4 │
│ │ │ • certifi>=2017.4.17 │
├────────────────────────┼───────────────────────────────────────┤
│ [16:30:15] Ready │ [i]nstall [u]pgrade [d]elete [s]how │
└────────────────────────┴───────────────────────────────────────┘
```
## Installation
### Prerequisites
- Python 3.8 or higher
- pip (Python package installer)
### Install from PyPI (Recommended)
```bash
pip install lazypip
```
### Install from Source
```bash
git clone https://github.com/playfairs/lazypip.git
cd lazypip
pip install -e .
```
### Development Installation
```bash
git clone https://github.com/playfairs/lazypip.git
cd lazypip
pip install -e ".[dev]"
```
## Usage
Start LazyPip from your terminal:
```bash
lazypip
```
### Keyboard Shortcuts
#### Navigation
- `↑↓` or `jk` - Navigate package list
- `Tab` - Switch between panels
- `Enter` or `Space` - Select package
#### Package Management
- `i` - Install new package
- `u` - Upgrade selected package
- `d` - Uninstall selected package
- `s` - Show package details
- `Ctrl+A` - Upgrade all outdated packages
#### Application
- `r` - Refresh package lists
- `/` - Search packages
- `f` - Show freeze output (requirements)
- `Ctrl+R` - Install from requirements.txt
- `q` or `Ctrl+C` - Quit
### Tabs
LazyPip organizes packages into three main tabs:
1. **Installed** - All currently installed packages
2. **Outdated** - Packages with available updates
3. **Search** - Search for new packages to install
### Package Status Indicators
- `✓` - Package is installed and up-to-date
- `↑` - Package is installed but outdated
- `✗` - Package is not installed
- `?` - Package status unknown
## Themes
LazyPip supports multiple themes:
- **Dark Theme** (default) - Easy on the eyes for long sessions
- **Light Theme** - For bright environments
- **High Contrast** - Accessibility-focused theme
## Project Structure
```
lazypip/
├── src/
│ └── lazypip/
│ ├── __init__.py
│ ├── __main__.py # Application entry point
│ ├── app.py # Main Textual app
│ ├── theme.py # CSS styling
│ ├── core/
│ │ ├── pip_api.py # Pip command wrapper
│ │ ├── installer.py # Package installation logic
│ │ └── parser.py # Output parsing utilities
│ └── tui/
│ ├── screens/
│ │ ├── main.py # Main application screen
│ │ ├── install_dialog.py
│ │ └── confirmation_dialog.py
│ └── widgets/
│ ├── package_list.py # Package list widget
│ ├── package_details.py # Package details panel
│ └── status_bar.py # Status bar widget
├── tests/ # Test suite
├── requirements.txt
├── pyproject.toml
└── README.md
```
## Testing
Run the test suite:
```bash
# Install test dependencies
pip install -e ".[test]"
# Run tests
pytest
# Run with coverage
pytest --cov=lazypip
```
## Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
### Development Setup
1. Fork the repository
2. Clone your fork: `git clone https://github.com/yourusername/lazypip.git`
3. Create a virtual environment: `python -m venv venv`
4. Activate it: `source venv/bin/activate` (Linux/Mac) or `venv\Scripts\activate` (Windows)
5. Install in development mode: `pip install -e ".[dev]"`
6. Run tests: `pytest`
### Code Style
This project uses:
- [Black](https://github.com/psf/black) for code formatting
- [Flake8](https://flake8.pycqa.org/) for linting
- [MyPy](https://mypy.readthedocs.io/) for type checking
Format code before committing:
```bash
black src/ tests/
flake8 src/ tests/
mypy src/
```
## Bug Reports & Feature Requests
Please use the [GitHub Issues](https://github.com/playfairs/lazypip/issues) page to report bugs or request features.
## Acknowledgments
- Inspired by [lazygit](https://github.com/jesseduffield/lazygit) - The best git TUI
- Built with [Textual](https://github.com/Textualize/textual) - Amazing Python TUI framework
- Styled with [Rich](https://github.com/Textualize/rich) - Beautiful terminal formatting
## Roadmap
- [ ] Package dependency visualization
- [ ] Virtual environment management
- [ ] Package vulnerability scanning
- [ ] Custom package sources support
- [ ] Export/import package lists
- [ ] Package usage statistics
- [ ] Plugin system
- [ ] Configuration file support
## Similar Projects
- [lazygit](https://github.com/jesseduffield/lazygit) - Git TUI (Inspiration to the TUI)
- [lazyvim](https://www.lazyvim.org/) - Lazy Vim (Inspiration to the name)
- [pip-tools](https://github.com/jazzband/pip-tools) - pip dependency management
- [pipx](https://github.com/pypa/pipx) - Install Python applications in isolated environments
- [pypi](https://pypi.org/) - Python Package Index - pip itself
---
**Made with ❤️ for the Python community**
If you find LazyPip useful, please consider giving it a ⭐ on GitHub!# -lazypip
Raw data
{
"_id": null,
"home_page": null,
"name": "lazypip",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": "playfairs <root@playfairs.cc>",
"keywords": "pip, tui, package-manager, python, lazygit, terminal",
"author": null,
"author_email": "playfairs <root@playfairs.cc>",
"download_url": "https://files.pythonhosted.org/packages/8c/01/1723fc7dff52efdd8dabf5a0713416ab55500f41f456f5f22714b2f3fb87/lazypip-0.1.1.tar.gz",
"platform": null,
"description": "# LazyPip \ud83d\udc0d\u26a1\n\nA **lazygit-style TUI** for Python package management using pip. Navigate, install, upgrade, and manage your Python packages with an intuitive terminal interface.\n\n[](https://python.org)\n[](https://www.gnu.org/licenses/gpl-3.0.en.html)\n[](https://github.com/psf/black)\n\n## \ud83d\ude80 Features\n\n- **Intuitive TUI** - Navigate packages with vim-like keybindings\n- **Real-time Package Status** - See installed, outdated, and available packages\n- **Quick Actions** - Install, upgrade, uninstall with single keystrokes\n- **Package Details** - View comprehensive package information\n- **Bulk Operations** - Upgrade all outdated packages at once\n- **Requirements Management** - Install from requirements.txt\n- **Search & Filter** - Find packages quickly\n- **Keyboard-First** - Designed for efficiency and speed\n\n## Example\n\n```\n\u250c\u2500 LazyPip - Python Package Manager \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 Installed (142) \u2502 Package Details \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 Status \u2502 Package \u2502 requests \u2713 \u2502\n\u2502 \u2713 \u2502 requests \u2502 \u2502\n\u2502 \u2191 \u2502 numpy \u2502 Version: 2.31.0 \u2502\n\u2502 \u2713 \u2502 flask \u2502 Latest: 2.31.0 \u2502\n\u2502 \u2191 \u2502 django \u2502 \u2502\n\u2502 \u2713 \u2502 pytest \u2502 Summary: Python HTTP for Humans. \u2502\n\u2502 \u2502 \u2502 \u2502\n\u2502 \u2502 \u2502 Location: /usr/local/lib/python3.11 \u2502\n\u2502 \u2502 \u2502 \u2502\n\u2502 \u2502 \u2502 Requires: \u2502\n\u2502 \u2502 \u2502 \u2022 urllib3>=1.21.1,<3 \u2502\n\u2502 \u2502 \u2502 \u2022 idna>=2.5,<4 \u2502\n\u2502 \u2502 \u2502 \u2022 certifi>=2017.4.17 \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 [16:30:15] Ready \u2502 [i]nstall [u]pgrade [d]elete [s]how \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n```\n\n## Installation\n\n### Prerequisites\n\n- Python 3.8 or higher\n- pip (Python package installer)\n\n### Install from PyPI (Recommended)\n\n```bash\npip install lazypip\n```\n\n### Install from Source\n\n```bash\ngit clone https://github.com/playfairs/lazypip.git\ncd lazypip\npip install -e .\n```\n\n### Development Installation\n\n```bash\ngit clone https://github.com/playfairs/lazypip.git\ncd lazypip\npip install -e \".[dev]\"\n```\n\n## Usage\n\nStart LazyPip from your terminal:\n\n```bash\nlazypip\n```\n\n### Keyboard Shortcuts\n\n#### Navigation\n- `\u2191\u2193` or `jk` - Navigate package list\n- `Tab` - Switch between panels\n- `Enter` or `Space` - Select package\n\n#### Package Management\n- `i` - Install new package\n- `u` - Upgrade selected package\n- `d` - Uninstall selected package\n- `s` - Show package details\n- `Ctrl+A` - Upgrade all outdated packages\n\n#### Application\n- `r` - Refresh package lists\n- `/` - Search packages\n- `f` - Show freeze output (requirements)\n- `Ctrl+R` - Install from requirements.txt\n- `q` or `Ctrl+C` - Quit\n\n### Tabs\n\nLazyPip organizes packages into three main tabs:\n\n1. **Installed** - All currently installed packages\n2. **Outdated** - Packages with available updates\n3. **Search** - Search for new packages to install\n\n### Package Status Indicators\n\n- `\u2713` - Package is installed and up-to-date\n- `\u2191` - Package is installed but outdated\n- `\u2717` - Package is not installed\n- `?` - Package status unknown\n\n## Themes\n\nLazyPip supports multiple themes:\n\n- **Dark Theme** (default) - Easy on the eyes for long sessions\n- **Light Theme** - For bright environments\n- **High Contrast** - Accessibility-focused theme\n\n## Project Structure\n\n```\nlazypip/\n\u251c\u2500\u2500 src/\n\u2502 \u2514\u2500\u2500 lazypip/\n\u2502 \u251c\u2500\u2500 __init__.py\n\u2502 \u251c\u2500\u2500 __main__.py # Application entry point\n\u2502 \u251c\u2500\u2500 app.py # Main Textual app\n\u2502 \u251c\u2500\u2500 theme.py # CSS styling\n\u2502 \u251c\u2500\u2500 core/\n\u2502 \u2502 \u251c\u2500\u2500 pip_api.py # Pip command wrapper\n\u2502 \u2502 \u251c\u2500\u2500 installer.py # Package installation logic\n\u2502 \u2502 \u2514\u2500\u2500 parser.py # Output parsing utilities\n\u2502 \u2514\u2500\u2500 tui/\n\u2502 \u251c\u2500\u2500 screens/\n\u2502 \u2502 \u251c\u2500\u2500 main.py # Main application screen\n\u2502 \u2502 \u251c\u2500\u2500 install_dialog.py\n\u2502 \u2502 \u2514\u2500\u2500 confirmation_dialog.py\n\u2502 \u2514\u2500\u2500 widgets/\n\u2502 \u251c\u2500\u2500 package_list.py # Package list widget\n\u2502 \u251c\u2500\u2500 package_details.py # Package details panel\n\u2502 \u2514\u2500\u2500 status_bar.py # Status bar widget\n\u251c\u2500\u2500 tests/ # Test suite\n\u251c\u2500\u2500 requirements.txt\n\u251c\u2500\u2500 pyproject.toml\n\u2514\u2500\u2500 README.md\n```\n\n## Testing\n\nRun the test suite:\n\n```bash\n# Install test dependencies\npip install -e \".[test]\"\n\n# Run tests\npytest\n\n# Run with coverage\npytest --cov=lazypip\n```\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n\n### Development Setup\n\n1. Fork the repository\n2. Clone your fork: `git clone https://github.com/yourusername/lazypip.git`\n3. Create a virtual environment: `python -m venv venv`\n4. Activate it: `source venv/bin/activate` (Linux/Mac) or `venv\\Scripts\\activate` (Windows)\n5. Install in development mode: `pip install -e \".[dev]\"`\n6. Run tests: `pytest`\n\n### Code Style\n\nThis project uses:\n- [Black](https://github.com/psf/black) for code formatting\n- [Flake8](https://flake8.pycqa.org/) for linting\n- [MyPy](https://mypy.readthedocs.io/) for type checking\n\nFormat code before committing:\n```bash\nblack src/ tests/\nflake8 src/ tests/\nmypy src/\n```\n\n## Bug Reports & Feature Requests\n\nPlease use the [GitHub Issues](https://github.com/playfairs/lazypip/issues) page to report bugs or request features.\n\n## Acknowledgments\n\n- Inspired by [lazygit](https://github.com/jesseduffield/lazygit) - The best git TUI\n- Built with [Textual](https://github.com/Textualize/textual) - Amazing Python TUI framework\n- Styled with [Rich](https://github.com/Textualize/rich) - Beautiful terminal formatting\n\n## Roadmap\n\n- [ ] Package dependency visualization\n- [ ] Virtual environment management\n- [ ] Package vulnerability scanning\n- [ ] Custom package sources support\n- [ ] Export/import package lists\n- [ ] Package usage statistics\n- [ ] Plugin system\n- [ ] Configuration file support\n\n## Similar Projects\n\n- [lazygit](https://github.com/jesseduffield/lazygit) - Git TUI (Inspiration to the TUI)\n- [lazyvim](https://www.lazyvim.org/) - Lazy Vim (Inspiration to the name)\n- [pip-tools](https://github.com/jazzband/pip-tools) - pip dependency management\n- [pipx](https://github.com/pypa/pipx) - Install Python applications in isolated environments\n- [pypi](https://pypi.org/) - Python Package Index - pip itself\n\n---\n\n**Made with \u2764\ufe0f for the Python community**\n\nIf you find LazyPip useful, please consider giving it a \u2b50 on GitHub!# -lazypip\n",
"bugtrack_url": null,
"license": "GPL-3.0",
"summary": "A lazygit-style TUI for Python package management using pip",
"version": "0.1.1",
"project_urls": {
"Bug Tracker": "https://github.com/playfairs/lazypip/issues",
"Documentation": "https://github.com/playfairs/lazypip#readme",
"Homepage": "https://github.com/playfairs/lazypip",
"Repository": "https://github.com/playfairs/lazypip"
},
"split_keywords": [
"pip",
" tui",
" package-manager",
" python",
" lazygit",
" terminal"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "a8bf851fed972acf37656a8c2edc0af2188e1819fb6dc50bf2b49bd4d8e41a5d",
"md5": "9d1b7f6931a807729cc5ad1ce75804f9",
"sha256": "df06de2d60bc612e9b8bd3dfb519e87f36b42cadb942785f5f5edad9d43bc2e1"
},
"downloads": -1,
"filename": "lazypip-0.1.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "9d1b7f6931a807729cc5ad1ce75804f9",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 35864,
"upload_time": "2025-08-03T18:49:52",
"upload_time_iso_8601": "2025-08-03T18:49:52.825770Z",
"url": "https://files.pythonhosted.org/packages/a8/bf/851fed972acf37656a8c2edc0af2188e1819fb6dc50bf2b49bd4d8e41a5d/lazypip-0.1.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "8c011723fc7dff52efdd8dabf5a0713416ab55500f41f456f5f22714b2f3fb87",
"md5": "65ac542ae84678dbee2979e53b1fce39",
"sha256": "4bc566ce41b13244e35aa2fdbfa4f31f14ef9a04345b8da01679982970871b1d"
},
"downloads": -1,
"filename": "lazypip-0.1.1.tar.gz",
"has_sig": false,
"md5_digest": "65ac542ae84678dbee2979e53b1fce39",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 34178,
"upload_time": "2025-08-03T18:49:53",
"upload_time_iso_8601": "2025-08-03T18:49:53.870586Z",
"url": "https://files.pythonhosted.org/packages/8c/01/1723fc7dff52efdd8dabf5a0713416ab55500f41f456f5f22714b2f3fb87/lazypip-0.1.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-08-03 18:49:53",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "playfairs",
"github_project": "lazypip",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"requirements": [
{
"name": "textual",
"specs": [
[
">=",
"0.45.0"
]
]
},
{
"name": "requests",
"specs": [
[
">=",
"2.31.0"
]
]
},
{
"name": "rich",
"specs": [
[
">=",
"13.0.0"
]
]
},
{
"name": "click",
"specs": [
[
">=",
"8.1.0"
]
]
}
],
"lcname": "lazypip"
}