chore: 更新技能引用名称并新增 yt-studio-auth-prep 登录脚本

This commit is contained in:
2026-09-30 10:22:05 +08:00
parent 9020752eed
commit 05b2fc8d65
19 changed files with 513 additions and 162 deletions

View File

@@ -0,0 +1,130 @@
---
name: "yt-download-place"
description: "在当前目录或指定路径创建 uv 项目工作区(git 仓库 + pyproject.toml + .venv + assets + data + .gitignore + uv.lock),作为 YouTube 下载类技能脚本的统一运行环境。当用户要求准备工作区/下载目录/新建 uv 项目、为 yt 技能装依赖(pandas/openpyxl/playwright/requests)备环境,或 uv/.venv 报错时使用。"
---
# yt-download-place:下载工作区
在目标目录落地一套标准 uv 项目结构,让其他 yt 技能(url-builder、groupid-lookup、csv-download)的脚本统一以 `uv run python <脚本>` 运行。一个工作区承载一批下载任务:`assets/` 存中间数据(需求清单、URL 清单、解析产物),`data/` 存最终下载数据(不进 git)。
目标目录 = 用户指定路径,未指定则用当前目录;目录不存在时先创建。目标结构:
```
<place>/
├── .git/
├── .venv/
├── assets/
├── data/
├── .gitignore
├── pyproject.toml
├── README.md
└── uv.lock
```
## 步骤 1:确认 uv 可用
```powershell
uv --version
```
失败时按顺序尝试,命中即停:
1. **会话内刷新 PATH**(刚装完 uv、未重开终端):
- PowerShell:`$env:Path = [Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [Environment]::GetEnvironmentVariable("Path","User")`
- Git Bash / zsh:`export PATH="$PATH:$HOME/.local/bin"`
- cmd:重开终端(cmd 无法可靠刷新)
2. **模块入口**:`python -m uv --version`。可用则本文所有 `uv <子命令>` 改为 `python -m uv <子命令>`,其余不变。
3. **pip 兜底**:`pip install uv` 后回到第 2 条(pip 装的随当前 Python 立即可用)。
**完成判据**:`uv --version` 或 `python -m uv --version` 打印版本号。
## 步骤 2:搭建工作区骨架
在 `<place>` 下创建两个数据目录(两种 shell 写法二选一;路径统一正斜杠 + 引号,两边通用):
```powershell
# PowerShell
New-Item -ItemType Directory -Force "<place>/assets", "<place>/data" | Out-Null
```
```bash
# Git Bash / zsh
mkdir -p "<place>/assets" "<place>/data"
```
写入三个文件(已存在则跳过,不覆盖):
**pyproject.toml**
```toml
[project]
name = "yt-download-place"
version = "0.1.0"
requires-python = ">=3.10"
```
依赖不写在这里:四个必需包由步骤 3 的 `uv add` 统一补齐(单一来源,已存在 pyproject.toml 的工作区同样适用)。
**.gitignore**
```gitignore
# Python-generated files
__pycache__/
*.py[oc]
build/
dist/
wheels/
*.egg-info
# Virtual environments
.venv
.profile
bundle*.json
# Data folder
data/
```
**README.md**
```markdown
# yt-download-place
YouTube 下载工作区:assets/ 存中间数据,data/ 存下载数据(不入 git)。
技能脚本一律 `uv run python <脚本>` 运行。
```
**git 仓库**:`<place>/.git` 不存在时执行 `git init`;已是仓库则复用。
**完成判据**:`<place>` 下存在 `assets\`、`data\`、`pyproject.toml`、`.gitignore`、`README.md`、`.git`,且原有文件未被改动。
## 步骤 3:补齐依赖并同步环境
`<place>` 下执行:
```powershell
uv add pandas openpyxl playwright requests
```
- 必需包固定四件:`pandas`、`openpyxl`、`playwright`、`requests`——yt 技能脚本(url-builder、groupid-lookup、csv-download、auth-prep)运行的全部依赖。
- `uv add` 幂等:已满足的包直接跳过,缺失的写入 `pyproject.toml` 与 `uv.lock` 并同步 `.venv\`;首次准备自动创建 `.venv\`,本机无兼容 Python 时自动下载托管 Python(≥3.10)。
- 复用已有 `pyproject.toml`(非本模板)的工作区同样适用:只追加缺失的这四个包,其余依赖不动。
- `uv run` 会隐式同步;显式 `uv add` 是为了把缺包/依赖冲突一次性暴露。
**完成判据**:退出码 0,`<place>` 下出现 `.venv\` 与 `uv.lock`,且 `pyproject.toml` 的 `dependencies` 含这四个包。
## 步骤 4:验证并交付
```powershell
uv run python -c "import pandas, openpyxl, playwright, requests; print('env OK')"
```
**完成判据(全局)**:打印 `env OK`。向用户报告工作区路径,此后约定:
- 其他技能脚本都在 `<place>` 下用 `uv run python <脚本>` 执行;不裸调 `python`、不手动激活 venv、不向全局 pip 装依赖。
- 中间数据写 `<place>/assets/`,下载数据写 `<place>/data/`。
- 新增依赖:`uv add <包>`(唯一入口,禁止 pip 直装绕过 lock)。
## 排查
uv 不识别、国内镜像加速、`No solution found`、`.venv` 损坏重建、playwright 浏览器下载慢、无 uv 手动兜底等,查 [references/troubleshooting.md](references/troubleshooting.md)。

View File

@@ -0,0 +1,68 @@
# 工作区排查
## uv 不识别(按序排查)
1. **刚装完、当前会话不认识**:会话内刷新 PATH——
- PowerShell:`$env:Path = [Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [Environment]::GetEnvironmentVariable("Path","User")`
- Git Bash / zsh:`export PATH="$PATH:$HOME/.local/bin"`
- cmd:重开终端。
2. **试试模块入口**:`python -m uv --version`。可用则后续所有 `uv <子命令>` 都换成 `python -m uv <子命令>`。
3. **用 pip 兜底安装**:`pip install uv` 后回到第 2 条,立即生效(winget/官方脚本方式要等新终端)。
4. **彻底没有 Python/uv**:先装 Python 3.10+(或让 uv 官方脚本一并装好托管 Python),再走第 3 条。
## 网络与镜像(国内环境)
`uv sync` / `uv run` 拉包慢或超时时,临时切换清华镜像:
```powershell
$env:UV_DEFAULT_INDEX = "https://pypi.tuna.tsinghua.edu.cn/simple"
uv sync
```
要持久化则写入工作区 `pyproject.toml`:
```toml
[[tool.uv.index]]
url = "https://pypi.tuna.tsinghua.edu.cn/simple"
default = true
```
## sync / add 相关
- **`No solution found` / 依赖解析冲突**:`dependencies` 里的版本约束互相矛盾(含 `uv add` 追加的包与既有约束冲突)。放宽或修正 `pyproject.toml` 后重试。
- **缺必需包**:`pyproject.toml` 里没有 pandas/openpyxl/playwright/requests(常见于复用已有项目)。工作区根执行 `uv add pandas openpyxl playwright requests` 补齐(幂等)。
- **lock 与 pyproject 不一致**:`uv.lock` 过期,`uv sync` / `uv add` 会自动更新;若报 lock 损坏,删除 `uv.lock` 后重新 `uv sync`。
- **`requires-python` 不满足**:本机 Python 全部低于 3.10。让 uv 自动下载即可:`uv sync -p 3.12`(或省略,uv 自选)。
## .venv 损坏 / 重建
症状:`uv run` 报奇怪的导入错误、DLL 加载失败,或 `.venv` 被移动过。工作区根执行:
```powershell
Remove-Item -Recurse -Force .venv
uv sync
```
## playwright 相关
- **`ModuleNotFoundError: playwright`**(或其他必需包缺失):环境未同步或缺包。工作区根执行 `uv add pandas openpyxl playwright requests` 补齐,或直接用 `uv run python <脚本>`。
- **复用系统 Chrome/Edge 无需 `playwright install`**:只有用工作区内置 Chromium 时才需要 `uv run playwright install chromium`。
- **`playwright install` 下载浏览器慢**:`$env:PLAYWRIGHT_DOWNLOAD_HOST = "https://npmmirror.com/mirrors/playwright"` 后重试。
## 无工作区目录临时跑脚本(PEP 723 兜底)
技能脚本头部带 PEP 723 内联依赖声明(`# /// script ... ///`),在无 `pyproject.toml` 的目录直接 `uv run <脚本>` 也可运行,uv 自动建缓存环境:
- 报「无法解析依赖/找不到脚本」时:确认路径存在且为正斜杠写法;确认脚本头部声明未被删改。
- 需要重建缓存环境:删除 `%LOCALAPPDATA%\uv\cache\environments-v2` 下对应目录(或整体 `uv cache clean`)后重试。
- 批量/长期使用仍建议按 SKILL.md 建正式工作区,避免缓存环境碎片化。
## 无 uv 的最终兜底
uv 完全装不上时,用标准库 venv 手动搭(仅应急,失去 lock 可复现性):
```powershell
python -m venv .venv
.venv\Scripts\python.exe -m pip install pandas openpyxl playwright requests
# 此后所有命令用 .venv\Scripts\python.exe 替代 uv run python
```