Metadata-Version: 2.5
Name: pip-auto
Version: 0.6.0
Summary: Just import it. Missing packages install themselves - fast, safe, and in your language.
License-Expression: MIT
License-File: LICENSE
Keywords: auto-install,dependencies,import,installer,pep723,pip
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Console
Classifier: Intended Audience :: Developers
Classifier: Natural Language :: Chinese (Simplified)
Classifier: Natural Language :: Chinese (Traditional)
Classifier: Natural Language :: English
Classifier: Natural Language :: French
Classifier: Natural Language :: German
Classifier: Natural Language :: Japanese
Classifier: Natural Language :: Korean
Classifier: Natural Language :: Portuguese
Classifier: Natural Language :: Russian
Classifier: Natural Language :: Spanish
Classifier: Operating System :: Microsoft :: Windows
Classifier: Operating System :: POSIX
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Topic :: Software Development :: Build Tools
Classifier: Topic :: System :: Software Distribution
Requires-Python: >=3.8
Description-Content-Type: text/markdown

# pip-auto

**Just `import` it. Missing packages install themselves.**

```bash
pip install pip-auto
```

That's the whole setup. From now on, when your code imports something that isn't installed, pip-auto finds the
right package on PyPI, installs it on the spot, and your program keeps running — no `ModuleNotFoundError`,
no stopping to run `pip install`, no restarting.

```python
import pyfiglet               # not installed? fine
from PIL import Image         # import name ≠ package name? fine (installs pillow)
import cv2                    # installs opencv-python
print(pyfiglet.figlet_format("hello"))
```

```
[autopip] 'pyfiglet' not found → installing pyfiglet
[autopip] installed pyfiglet==1.0.4 (2.51s)
```

## Why it's nice

- **Zero setup.** `pip install pip-auto` turns it on for that Python. `pip uninstall pip-auto` removes every trace.
- **It knows the real package name.** `PIL` → `pillow`, `cv2` → `opencv-python`, `sklearn` → `scikit-learn`,
  `bs4` → `beautifulsoup4`, `google.generativeai` → `google-generativeai`, plus ~1,000 more mappings — and it
  learns new ones from every wheel it sees. Before installing, it **opens the wheel and checks the module is really
  inside**, so a same-named impostor never gets installed.
- **Fast.** Its own installer (pip is not used): dependencies are prefetched and resolved in parallel, and every file
  of every wheel is placed in one parallel batch. From the second time on it just hard-links from a local cache.
  Installing requests + numpy + pandas + flask + rich (22 packages) into a fresh environment:
  **pip 58 s → pip-auto 13 s → 2.7 s the second time.** It adds only about **5 ms** to Python startup.
- **Safe.** Names that look like popular packages (typosquats such as `requets`) and brand-new unknown packages are
  never installed automatically. If anything fails halfway, everything — including the old versions it replaced — is
  rolled back.
- **Respects "optional" imports.** `try: import x / except ImportError:` in your code, optional imports inside
  libraries, and `importlib.util.find_spec("x")` checks are left alone.
- **Works everywhere you run Python:** scripts, Jupyter / IPython, virtual environments.
- **Speaks your language.** Messages follow your OS language: English, 日本語, 简体中文, 繁體中文, 한국어,
  Español, Français, Deutsch, Português, Русский.

## Tell it what you want (optional)

```python
# /// script
# dependencies = ["requests<3", "rich"]
# ///
import requests, rich            # a PEP 723 block is installed up front, all at once
import numpy  # autopip: numpy<2   ← pin a version with an end-of-line comment
```

## Commands

| Command | What it does |
|---|---|
| `autopip run x.py` | Install everything `x.py` needs first, then run it (`--venv` creates and uses `.venv` next to it) |
| `autopip lock x.py` | Write `x.autopip.lock` with every version **and sha256** pinned; `run` then installs exactly that |
| `autopip install ...` | **Same syntax as `pip install`**: `-r requirements.txt` (nested `-r`, `-c`, `--hash`, `-i`), `-e .`, `-U`, `--no-deps`, `--force-reinstall`, `--dry-run`, `-t DIR`, `--user` |
| `autopip uninstall pkg...` | Remove (also `-r file`) |
| `autopip list [--outdated]` / `show pkg` | Installed packages / packages with newer versions / details |
| `autopip upgrade pkg...` / `--all` | Upgrade (`--dry-run` to only show) |
| `autopip freeze [x.py]` | Pin what a script uses (`--requirements`, `--pep723`), or the whole environment |
| `autopip clean [--days 30] [--yes]` | Remove auto-installed packages you haven't used for a while |
| `autopip gui` | Browser dashboard: sizes, last used, clean-up, settings (127.0.0.1 only) |
| `autopip check pkg` | Run the safety check only |
| `autopip off` / `on` | Turn it off / back on |

`AUTOPIP_DISABLE=1` turns it off for a single command.

## Settings (`autopip config KEY VALUE`)

- `ask` — `true` to confirm before every install (asks on the console; never installs when nobody can answer)
- `safety` — `strict` (default) / `warn` / `off`
- `link_mode` — `hardlink` (default, fastest) / `copy` (separate files per environment)
- `lang` — `en`, `ja`, `zh`, `zh-TW`, `ko`, `es`, `fr`, `de`, `pt`, `ru` (default: your OS language; also `AUTOPIP_LANG`)
- `index_url` / `extra_index_urls` — other package indexes (`pip.ini` / `PIP_INDEX_URL` are read too)

## Compatibility

- **Python 3.8 – 3.14** (the test suite runs on all seven). Tested mainly on Windows; wheel selection on Linux / macOS
  is handled by `packaging`.
- Modules removed from the standard library in Python 3.13 (`imghdr`, `cgi`, `telnetlib`, …) are provided by
  installing their maintained successors (`standard-imghdr`, `legacy-cgi`, …).
- No dependencies. MIT license.

## Good to know

- Only packages from PyPI (or the indexes you configure) are installed, and every install is logged.
- In `hardlink` mode, environments share the same files. If you edit installed files in place, use `link_mode copy`.

日本語の説明: README.ja.md (included in the source distribution)
