PYVY 0.1.2.2
A modern Python environment manager with a clean GUI. Manage virtual environments, modules, and Python versions effortlessly — powered by uv
Requires Python: >=3.10

![UV](https://img.shields.io/badge/UV-0.9.4-blue) ![python](https://img.shields.io/badge/python-3.13.9%7C3.11.14-blue)


# PYVY — モジュールと環境マネージャー（PyQt6 + uv）

[パッチノート ](https://github.com/jyup-escape/PYVY/edit/main/patchnote.md)
GUI で Python 仮想環境とモジュール（パッケージ）を管理できるデスクトップアプリです。内部的に [uv](https://github.com/astral-sh/uv) を呼び出して、環境作成・パッケージの一覧/インストール/アンインストール/アップデートなどを行います。PyQt6 製で、非同期実行（`QThread`）により UI をブロックしません。

> **想定用途**: 複数の仮想環境や依存パッケージを GUI から直感的に扱いたい個人/チーム向け。

---

## 主な機能

* **環境管理**

  * 既存環境の自動検出（`<プロジェクト>/.venv` と `envs/` 配下）
  * 新規環境の作成（`uv venv`）
  * 管理対象内の環境削除
  * 選択中環境の Python バージョン表示（`pyvenv.cfg` から）
* **モジュール（パッケージ）管理**

  * インストール済みモジュール一覧（`uv pip list --format json`）
  * キーワード検索フィルタ
  * 指定モジュールの **インストール/削除/バージョン固定**（`==` 指定）
  * アウトデート検出 → 一括アップデート（確認ダイアログ付き）
* **UI/操作性**

  * 行選択テーブル、交互行色、ステータスバー
  * 実行中は操作を抑止して安全化（ビジー表示）
  * エラー/確認/情報ダイアログ



---

## 動作要件

* Python **3.10+**（3.11/3.12 推奨）
* **uv** CLI が PATH から実行可能であること
* OS: Windows

> 本アプリは **uv** を通じて仮想環境・パッケージ操作を行います。pip の代替として uv を利用します。

---

## セットアップ

```bash
# リポジトリ取得
git clone https://github.com/jyup-escape/PYVY
cd PYVY

# 依存（アプリ自身の GUI 実行に必要）
# ※ アプリ内部で uv を呼ぶので uv は別途インストールしてください
pip install PyQt6

# uv のインストール（未導入の場合）
# 例）macOS/Homebrew
brew install uv
# 例）pipx
pipx install uv
```

---

## 実行方法

```bash
python main.py
```

> 本 README のコード例では `ModuleGUI` を直接 `__main__` から起動します。

---

## 使い方

### 1) 環境管理

* **検出**: プロジェクト直下の `.venv`、および `envs/` ディレクトリ配下の仮想環境（`pyvenv.cfg` が存在するもの）を自動検出します。
* **新規作成**: 「新規環境作成」を押下し、環境名を入力します。
* **削除**: `envs/` 配下にある環境のみ削除できます（安全のため管理外は不可）。
* **Python バージョン管理**: ダイアログで指定バージョンを入力 → `uv python install <version>` を実行します。

### 2) モジュール管理

* **一覧**: 「環境」を選択すると、`uv pip list --format json` の結果をテーブル表示します。
* **検索**: 上部の検索欄にキーワードを入力するとクライアント側フィルタで絞り込みます。
* **インストール**: 下部入力にパッケージ名（例: `requests`、`pydantic==2.9.2`）→「インストール」。
* **バージョン管理**: 行の「バージョン管理」から特定バージョンを指定して再インストールします。
* **削除**: 行の「削除」でアンインストールします（確認あり）。
* **一括更新**: 「一括モジュール更新」→ アウトデート検出 → 更新実行（確認あり）。

---

## 仕組み（実装メモ）

* **非同期実行**: `CommandThread(QThread)` が `uv` コマンドを別スレッドで実行し、シグナルで結果を返します。
* **UI のビジー制御**: 実行中はボタン/入力/UI 全体を無効化し、完了後に復帰します。
* **環境検出**: `discover_environments()` で `.venv` と `envs/*/pyvenv.cfg` を列挙・重複排除。
* **Python 実行ファイル**: OS 別に `bin/python`（Unix）/`Scripts/python.exe`（Windows）を検索。
* **モジュール一覧/更新**: `uv pip list --format json` / `--outdated` を利用して JSON を解析しテーブル更新。

---

## トラブルシュート

* **uv が見つからない**

  * PATH に `uv` が通っていない可能性があります。ターミナルで `uv --version` を実行して確認してください。
* **環境が検出されない/空**

  * `.venv` または `envs/` 配下に `pyvenv.cfg` が存在するか確認してください。
* **Windows でアンチウイルスにブロックされる**

  * `uv` の実行を許可してください。権限に注意してください。
* **権限エラー**

  * システム領域や管理者権限が必要なディレクトリでの操作を避け、ユーザーディレクトリ配下で実行してください。

---

## 開発ガイド

* 依存: PyQt6（UI）、`uv`（外部 CLI）
* コード構成:

  * `ModuleGUI`（`QWidget`）: UI/状態/イベント束ね
  * `CommandThread`（`QThread`）: コマンド実行と結果通知
* 今後の拡張候補（ロードマップ例）

  * インストールログ/履歴ダイアグラムの表示
  * 依存関係ビュー（tree）
  * 設定のエクスポート/インポート（JSON）
  * ダークテーマ/テーマ切替
  * エラーメッセージの改善（詳細ログ保存）

---
## 協力してくれる方向け
### 現在困っているもの
* Macでのテスト
* Linuxでのテスト
* pythonの互換性テスト
---
## ライセンス

* リポジトリ同梱の `LICENSE` を参照してください。

## 謝辞

* 本アプリは Astral の **uv** に大きく依存しています。素晴らしいツールの提供に感謝します。