Metadata-Version: 2.5
Name: pip-auto
Version: 0.3.0
Summary: Just import it. Missing modules are installed from PyPI automatically. / import するだけで無いモジュールを PyPI から自動インストール
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 :: Japanese
Classifier: Operating System :: Microsoft :: Windows
Classifier: Operating System :: POSIX
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Topic :: Software Development :: Build Tools
Classifier: Topic :: System :: Software Distribution
Requires-Python: >=3.10
Description-Content-Type: text/markdown

# pip-auto

**import するだけ。無いモジュールは勝手に入る。**

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

これだけ。あとは普通に Python を書いて動かすと、足りないモジュールがその場で PyPI から入ってそのまま動き続けます。

```python
import pyfiglet             # 入ってなくても OK
from PIL import Image       # import 名と pip 名が違っても OK(pillow を入れる)
import cv2                  # opencv-python を入れる
print(pyfiglet.figlet_format("hello"))
```

```
[autopip] 'pyfiglet' が無い → pyfiglet を入れる
[autopip] pyfiglet==1.0.4 入った (2.51s)
```

## 何が便利か

- **入れるだけで有効**: `pip install pip-auto` で ON。`pip uninstall pip-auto` で完全に元通り
- **名前を当てる**: `PIL`→`pillow`、`cv2`→`opencv-python`、`google.generativeai`→`google-generativeai` など。
  候補は wheel の中身まで確認してから入れる(同名の別物は入れない)
- **速い**: pip を使わない自前インストーラ。依存を並列で先読みして解決し、全ファイルを 1 回でまとめて展開。
  2 回目以降はキャッシュからハードリンクを張るだけ(pip の 5〜10 倍程度)。Python の起動への上乗せは約 5ms
- **安全**: 人気パッケージにそっくりな名前(タイポスクワット)や、公開されたばかりの無名パッケージは自動では入れない。
  失敗したら途中まで入ったものも含めて全部元に戻す
- **ライブラリの「無くても動く」import は無視**: `try: import x except ImportError:` や `importlib.util.find_spec("x")` では入れない

## スクリプトに書いておく

```python
# /// script
# dependencies = ["requests<3", "rich"]
# ///
import requests, rich          # PEP 723 ブロックがあれば最初にまとめて入れる
import numpy  # autopip: numpy<2   ← 行末コメントでバージョン指定
```

## コマンド

| コマンド | 内容 |
|---|---|
| `autopip run x.py` | 足りないものを先にまとめて入れてから実行(`--venv` で隣に .venv を作ってそこで) |
| `autopip lock x.py` | 全部のバージョンと sha256 を固定した `x.autopip.lock` を作る。以後 `run` はその通りに入れる |
| `autopip freeze x.py --requirements` / `--pep723` | 使っているものを書き出す |
| `autopip install pkg...` / `uninstall pkg...` | 自前インストーラで入れる / 消す |
| `autopip clean [--days 30] [--yes]` | しばらく使ってない自動インストール品を掃除 |
| `autopip gui` | ブラウザで一覧・掃除・設定(127.0.0.1 のみ) |
| `autopip check pkg` | 安全チェックだけ |
| `autopip config ask true` | 入れる前に毎回確認する |
| `autopip off` / `on` | 一時的に止める / 戻す |

環境変数 `AUTOPIP_DISABLE=1` でその場だけ無効にできます。

## 設定 (`autopip config キー 値`)

- `ask` … `true` で入れる前に確認(端末から直接聞く。答えられない環境では入れない)
- `safety` … `strict`(既定)/ `warn` / `off`
- `link_mode` … `hardlink`(既定・速い)/ `copy`(環境ごとに別ファイル)
- `index_url` / `extra_index_urls` … PyPI 以外のインデックス(`pip.ini` / `PIP_INDEX_URL` も読みます)

## 注意

- 自動で入れるのは PyPI 上のパッケージです。何を入れたかは毎回ログに出ます
- ハードリンクモードでは同じファイルを複数の環境で共有します。入れたファイルを直接書き換える使い方をするなら `link_mode copy` に
- Python 3.10 以上。Windows で主に確認しています(Linux / macOS の wheel 選びは packaging に任せています)

---

## English

**Just import it — missing modules are installed from PyPI on the fly.**
`pip install pip-auto` enables it for that Python (a `.pth` hook); `pip uninstall pip-auto` removes it completely.
It maps import names to distribution names (`PIL`→`pillow`, `cv2`→`opencv-python`), verifies the wheel really contains the module,
blocks typosquats / brand-new unknown packages, resolves with backtracking, and installs everything in one parallel batch
with hard links from a local cache. Library-internal optional imports are left alone. Supports PEP 723 script metadata,
lock files with sha256, `autopip gui`, `autopip clean`, and `autopip freeze`.
