Metadata-Version: 2.4
Name: py2winapp-cli
Version: 0.1.0
Summary: 一键把 Python Web 应用打包成 Windows 桌面程序
Author-email: Chandler <275737875@qq.com>
License: MIT
Keywords: desktop,exe,flask,packaging,pyinstaller,windows
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Console
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: MacOS :: MacOS X
Classifier: Operating System :: Microsoft :: Windows
Classifier: Operating System :: POSIX :: Linux
Classifier: Programming Language :: Python :: 3
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: Topic :: System :: Archiving :: Packaging
Requires-Python: >=3.9
Requires-Dist: jinja2>=3
Requires-Dist: pillow>=10
Requires-Dist: pydantic>=2
Requires-Dist: pystray>=0.19
Requires-Dist: rich>=13
Requires-Dist: tomli>=2; python_version < '3.11'
Requires-Dist: typer>=0.9
Provides-Extra: build
Requires-Dist: build; extra == 'build'
Requires-Dist: twine; extra == 'build'
Provides-Extra: dev
Requires-Dist: mypy; extra == 'dev'
Requires-Dist: pytest-cov; extra == 'dev'
Requires-Dist: pytest>=7; extra == 'dev'
Requires-Dist: ruff; extra == 'dev'
Requires-Dist: types-pillow; extra == 'dev'
Description-Content-Type: text/markdown

# py2winapp

> 一键把 Python Web 应用打包成 Windows 桌面程序。
> 双击 exe 即用，无需安装 Python。启动有闪屏、托盘常驻、单实例保护、自动选端口、自动开浏览器、自定义图标。

## 安装

```bash
pip install py2winapp
```

## 快速开始

### 1. 初始化项目

```bash
py2winapp init MyApp --entry-module myapp.web --with-icon
```

生成 `py2winapp.toml`、`app/`、`build/` 骨架与默认图标。

### 2. 自定义图标

```bash
py2winapp icon --letter A --bg red --apply
py2winapp icon --letter Re --bg "#8B5CF6" --radius 0.5 --apply
```

预设配色：`blue green red purple orange teal pink dark black white`

### 3. 一键打包（Windows）

```bash
py2winapp build
```

产物在 `dist/<AppName>/<AppName>.exe`（onedir 模式）。

### 4. 开发调试（不打包）

```bash
py2winapp run
```

### 5. 仅生成 spec（任意平台）

```bash
py2winapp spec
```

### 6. 清理产物

```bash
py2winapp clean --what all
```

### 7. 环境诊断

```bash
py2winapp inspect
```

## 命令一览

| 命令 | 说明 |
|------|------|
| `init` | 初始化新桌面项目 |
| `icon` | 生成自定义图标 |
| `build` | 一键打包成 Windows exe |
| `run` | 不打包直接运行 launcher |
| `clean` | 清理构建产物 |
| `inspect` | 打印环境与配置信息 |
| `spec` | 仅生成 .spec 文件 |
| `version` | 打印版本 |

## 配置

全部参数集中在 `py2winapp.toml`（也支持 `pyproject.toml` 的 `[tool.py2winapp]`）。完整字段见 `docs/design_spec.md` §4。

最小示例：

```toml
[app]
name = "MyApp"
slug = "myapp"
version = "0.1.0"

[app.entry]
module = "myapp.web"
function = "run_web"

[app.data]
include_packages = ["myapp"]
```

## 应用入口要求

入口函数签名必须为：

```python
def run_web(host: str, port: int, **kwargs) -> None
```

阻塞调用，启动 Web 服务。`py2winapp` 不修改应用源码，仅通过配置注入。

## 退出码

| 码 | 含义 |
|----|------|
| 0 | 成功 |
| 1 | 通用失败 |
| 2 | 配置错误 |
| 3 | 环境不满足 |
| 4 | 构建失败 |
| 5 | 产物校验失败 |

## 技术栈

- CLI：typer + rich
- 配置：pydantic v2 + TOML
- 模板：jinja2
- 图标：Pillow
- 托盘：pystray
- 闪屏：tkinter
- 打包：PyInstaller（onedir + windowed）

## 设计文档

详见 `docs/design_spec.md`。

## License

MIT