amap-cli 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- amap_cli-0.1.0/.gitignore +4 -0
- amap_cli-0.1.0/.trae/specs/build-amap-cli/checklist.md +9 -0
- amap_cli-0.1.0/.trae/specs/build-amap-cli/spec.md +111 -0
- amap_cli-0.1.0/.trae/specs/build-amap-cli/tasks.md +46 -0
- amap_cli-0.1.0/PKG-INFO +290 -0
- amap_cli-0.1.0/README.md +283 -0
- amap_cli-0.1.0/amap-gui-reference.md +363 -0
- amap_cli-0.1.0/docs/manual-verification.md +134 -0
- amap_cli-0.1.0/pyproject.toml +20 -0
- amap_cli-0.1.0/skills/amap-cli/SKILL.md +164 -0
- amap_cli-0.1.0/src/amap_cli/__init__.py +5 -0
- amap_cli-0.1.0/src/amap_cli/__main__.py +9 -0
- amap_cli-0.1.0/src/amap_cli/api.py +90 -0
- amap_cli-0.1.0/src/amap_cli/cli.py +129 -0
- amap_cli-0.1.0/src/amap_cli/config.py +155 -0
- amap_cli-0.1.0/src/amap_cli/distance.py +194 -0
- amap_cli-0.1.0/src/amap_cli/errors.py +87 -0
- amap_cli-0.1.0/src/amap_cli/geocode.py +61 -0
- amap_cli-0.1.0/src/amap_cli/output.py +45 -0
- amap_cli-0.1.0/src/amap_cli/params.py +77 -0
- amap_cli-0.1.0/src/amap_cli/route.py +625 -0
- amap_cli-0.1.0/src/amap_cli/search_poi.py +281 -0
- amap_cli-0.1.0/uv.lock +8 -0
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Checklist
|
|
2
|
+
|
|
3
|
+
- [x] 已定义可本地安装的纯命令行工具形态,并明确使用 `uv` 管理项目
|
|
4
|
+
- [x] 已定义命令行配置高德 API Key 的能力,并明确配置按操作系统规范持久化保存
|
|
5
|
+
- [x] 已定义缺少配置时的错误反馈行为,确保用户知道如何补全配置
|
|
6
|
+
- [x] 已定义 `route` 命令的核心参数与输出要求,接口风格对齐官方 CLI,且不包含 `--json` 输入支持
|
|
7
|
+
- [x] 已定义 `search-poi` 命令的核心参数与输出要求,接口风格对齐官方 CLI,且不包含 `--json` 输入支持
|
|
8
|
+
- [x] 已定义统一的 JSON 输出结构,便于 Agent 解析成功和失败结果
|
|
9
|
+
- [x] 已定义 Agent 配套 skill 文档的交付要求
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# 纯命令行高德地图 CLI Spec
|
|
2
|
+
|
|
3
|
+
## Why
|
|
4
|
+
|
|
5
|
+
高德官方 CLI 依赖 GUI 容器,不适合 AI Agent 在纯终端或无界面环境下稳定调用。我们需要一个基于高德地图 API 的纯命令行工具,支持本地安装、命令行配置密钥、路径规划和 POI 搜索,并提供配套 skill 文档供 Agent 使用。
|
|
6
|
+
|
|
7
|
+
## What Changes
|
|
8
|
+
|
|
9
|
+
- 新建一个使用 Python 开发、可作为本地 CLI 安装的高德地图工具,依赖与项目管理使用 `uv`
|
|
10
|
+
- 新增配置命令,支持通过命令行写入并读取高德 API 所需配置,按当前操作系统的用户配置目录规范保存
|
|
11
|
+
- 新增 `route` 子命令,接口设计尽量对齐官方 CLI 的路径规划参数风格,但不支持 `--json` 输入
|
|
12
|
+
- 新增 `search-poi` 子命令,接口设计尽量对齐官方 CLI 的 POI 搜索参数风格,但不支持 `--json` 输入
|
|
13
|
+
- 统一所有命令的机器可读输出格式,便于 Agent 解析和处理错误
|
|
14
|
+
- 提供配套的 skill 文档,说明 Agent 如何安装、配置并调用该 CLI
|
|
15
|
+
|
|
16
|
+
## Impact
|
|
17
|
+
|
|
18
|
+
- Affected specs: CLI 安装能力、配置管理、路径规划、POI 搜索、Agent 集成
|
|
19
|
+
- Affected code: `pyproject.toml`、`src/amap_cli/` 包结构、CLI 入口、配置读写模块、高德 API 客户端、skill 文档
|
|
20
|
+
|
|
21
|
+
## ADDED Requirements
|
|
22
|
+
|
|
23
|
+
### Requirement: 本地可安装的纯命令行工具
|
|
24
|
+
|
|
25
|
+
系统 SHALL 提供一个可在本地安装和调用的纯命令行工具,安装后可直接通过统一命令名执行,不依赖 GUI 进程或浏览器容器。
|
|
26
|
+
|
|
27
|
+
#### Scenario: 安装后可直接调用
|
|
28
|
+
|
|
29
|
+
- **WHEN** 用户在本地通过 `uv` 完成项目安装
|
|
30
|
+
- **THEN** 终端中可以直接调用 CLI 命令查看帮助信息
|
|
31
|
+
- **AND** 工具在执行时不要求额外启动 GUI 服务
|
|
32
|
+
|
|
33
|
+
### Requirement: 按操作系统规范保存高德 API 配置
|
|
34
|
+
|
|
35
|
+
系统 SHALL 提供命令行配置能力,用于保存高德 API 配置项,并按当前操作系统的用户配置目录规范持久化保存,在后续请求中自动读取。
|
|
36
|
+
|
|
37
|
+
#### Scenario: 保存并复用配置
|
|
38
|
+
|
|
39
|
+
- **WHEN** 用户通过 CLI 写入高德 API Key 与相关配置项
|
|
40
|
+
- **THEN** 工具将配置保存到当前操作系统推荐的用户配置目录
|
|
41
|
+
- **AND** 后续执行路径规划或 POI 搜索命令时会自动读取该配置
|
|
42
|
+
|
|
43
|
+
#### Scenario: 缺少配置时返回可读错误
|
|
44
|
+
|
|
45
|
+
- **WHEN** 用户尚未完成配置就直接调用高德 API 相关命令
|
|
46
|
+
- **THEN** CLI 返回明确的错误信息
|
|
47
|
+
- **AND** 错误信息提示用户先执行配置命令
|
|
48
|
+
|
|
49
|
+
### Requirement: 路径规划命令接口对齐官方 CLI 风格
|
|
50
|
+
|
|
51
|
+
系统 SHALL 提供 `route` 子命令,并尽量复用官方 CLI 的核心参数设计,包括 `--from`、`--from-name`、`--to`、`--to-name`、`--type`、`--waypoints`、`--policy`、`--strategy`、`--city`,但不支持 `--json` 输入。
|
|
52
|
+
|
|
53
|
+
#### Scenario: 使用地名进行路径规划
|
|
54
|
+
|
|
55
|
+
- **WHEN** 用户调用 `route --from 北京南站 --to 天安门 --type driving`
|
|
56
|
+
- **THEN** CLI 调用高德地图 API 完成路径规划
|
|
57
|
+
- **AND** 返回包含起终点、出行方式、距离、预计时间和步骤摘要的 JSON 结果
|
|
58
|
+
|
|
59
|
+
#### Scenario: 使用坐标进行路径规划
|
|
60
|
+
|
|
61
|
+
- **WHEN** 用户调用 `route --from 116.397,39.909 --to 116.407,39.904 --type walking`
|
|
62
|
+
- **THEN** CLI 可以正确识别坐标输入并完成路径规划
|
|
63
|
+
|
|
64
|
+
### Requirement: POI 搜索命令接口对齐官方 CLI 风格
|
|
65
|
+
|
|
66
|
+
系统 SHALL 提供 `search-poi` 子命令,并尽量复用官方 CLI 的核心参数设计,包括 `--keyword`、`--city`、`--center`、`--radius`、`--pageSize`、`--pageIndex`,但不支持 `--json` 输入。
|
|
67
|
+
|
|
68
|
+
#### Scenario: 按城市关键词搜索 POI
|
|
69
|
+
|
|
70
|
+
- **WHEN** 用户调用 `search-poi --keyword 星巴克 --city 北京 --pageSize 1`
|
|
71
|
+
- **THEN** CLI 调用高德地图 API 执行搜索
|
|
72
|
+
- **AND** 返回包含查询状态、POI 列表、分页信息的 JSON 结果
|
|
73
|
+
|
|
74
|
+
#### Scenario: 按周边范围搜索 POI
|
|
75
|
+
|
|
76
|
+
- **WHEN** 用户调用 `search-poi --keyword 咖啡 --center 120.155,30.274 --radius 1000`
|
|
77
|
+
- **THEN** CLI 可以基于坐标与半径执行周边搜索
|
|
78
|
+
|
|
79
|
+
### Requirement: 面向 Agent 的稳定 JSON 输出
|
|
80
|
+
|
|
81
|
+
系统 SHALL 为成功与失败结果提供稳定、可机读的 JSON 输出格式,至少包含 `success`、`data`、`error` 字段,便于 Agent 可靠解析。
|
|
82
|
+
|
|
83
|
+
#### Scenario: 请求成功时返回统一结构
|
|
84
|
+
|
|
85
|
+
- **WHEN** 任一业务命令执行成功
|
|
86
|
+
- **THEN** CLI 返回 `success=true`
|
|
87
|
+
- **AND** 业务结果位于 `data` 字段中
|
|
88
|
+
- **AND** `error` 为 `null`
|
|
89
|
+
|
|
90
|
+
#### Scenario: 请求失败时返回统一结构
|
|
91
|
+
|
|
92
|
+
- **WHEN** 参数校验失败、配置缺失或高德 API 返回异常
|
|
93
|
+
- **THEN** CLI 返回 `success=false`
|
|
94
|
+
- **AND** `error` 字段中包含明确错误原因
|
|
95
|
+
|
|
96
|
+
### Requirement: 提供 Agent 使用说明
|
|
97
|
+
|
|
98
|
+
系统 SHALL 提供配套的 skill 文档,说明 CLI 的安装方式、配置方式、命令用法、输出约定与常见错误处理方式,便于 AI Agent 直接集成。
|
|
99
|
+
|
|
100
|
+
#### Scenario: Agent 按文档完成调用
|
|
101
|
+
|
|
102
|
+
- **WHEN** Agent 按 skill 文档执行安装、配置与命令调用
|
|
103
|
+
- **THEN** Agent 可以在无需 GUI 的前提下完成路径规划与 POI 搜索
|
|
104
|
+
|
|
105
|
+
## MODIFIED Requirements
|
|
106
|
+
|
|
107
|
+
无
|
|
108
|
+
|
|
109
|
+
## REMOVED Requirements
|
|
110
|
+
|
|
111
|
+
无
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Tasks
|
|
2
|
+
|
|
3
|
+
- [x] Task 1: 搭建基于 `uv` 的 Python CLI 项目骨架
|
|
4
|
+
- [x] SubTask 1.1: 初始化 `pyproject.toml`、源码目录与 CLI 入口
|
|
5
|
+
- [x] SubTask 1.2: 配置本地可安装的命令名与依赖管理方式
|
|
6
|
+
- [x] SubTask 1.3: 确认安装后可通过帮助命令看到基础用法
|
|
7
|
+
|
|
8
|
+
- [x] Task 2: 实现高德 API 配置管理
|
|
9
|
+
- [x] SubTask 2.1: 设计配置文件结构与操作系统路径解析策略
|
|
10
|
+
- [x] SubTask 2.2: 实现配置写入、读取与缺失校验
|
|
11
|
+
- [x] SubTask 2.3: 提供命令行配置入口,并输出可读结果
|
|
12
|
+
|
|
13
|
+
- [x] Task 3: 实现统一请求与输出基础能力
|
|
14
|
+
- [x] SubTask 3.1: 封装高德 API 请求客户端与公共错误处理
|
|
15
|
+
- [x] SubTask 3.2: 实现统一的 JSON 输出结构
|
|
16
|
+
- [x] SubTask 3.3: 处理坐标、地名等公共参数逻辑
|
|
17
|
+
|
|
18
|
+
- [x] Task 4: 实现路径规划命令
|
|
19
|
+
- [x] SubTask 4.1: 按官方 CLI 风格定义 `route` 参数接口
|
|
20
|
+
- [x] SubTask 4.2: 对接高德路径规划相关 API
|
|
21
|
+
- [x] SubTask 4.3: 输出包含摘要与步骤信息的结果结构
|
|
22
|
+
|
|
23
|
+
- [x] Task 5: 实现 POI 搜索命令
|
|
24
|
+
- [x] SubTask 5.1: 按官方 CLI 风格定义 `search-poi` 参数接口
|
|
25
|
+
- [x] SubTask 5.2: 对接高德 POI 搜索相关 API
|
|
26
|
+
- [x] SubTask 5.3: 输出包含 POI 列表与分页信息的结果结构
|
|
27
|
+
|
|
28
|
+
- [x] Task 6: 编写 Agent 配套使用文档
|
|
29
|
+
- [x] SubTask 6.1: 编写 skill 文档中的安装与配置说明
|
|
30
|
+
- [x] SubTask 6.2: 编写路径规划与 POI 搜索的调用示例
|
|
31
|
+
- [x] SubTask 6.3: 补充统一输出格式与常见错误说明
|
|
32
|
+
|
|
33
|
+
- [x] Task 7: 完成命令行手动验证
|
|
34
|
+
- [x] SubTask 7.1: 验证本地安装与帮助命令
|
|
35
|
+
- [x] SubTask 7.2: 验证配置写入与自动读取
|
|
36
|
+
- [x] SubTask 7.3: 验证路径规划命令的典型输入
|
|
37
|
+
- [x] SubTask 7.4: 验证 POI 搜索命令的典型输入
|
|
38
|
+
|
|
39
|
+
## Task Dependencies
|
|
40
|
+
|
|
41
|
+
- Task 2 depends on Task 1
|
|
42
|
+
- Task 3 depends on Task 1 and Task 2
|
|
43
|
+
- Task 4 depends on Task 3
|
|
44
|
+
- Task 5 depends on Task 3
|
|
45
|
+
- Task 6 depends on Task 4 and Task 5
|
|
46
|
+
- Task 7 depends on Task 2, Task 4, Task 5, and Task 6
|
amap_cli-0.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: amap-cli
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Pure command-line CLI for Amap APIs.
|
|
5
|
+
Requires-Python: >=3.11
|
|
6
|
+
Description-Content-Type: text/markdown
|
|
7
|
+
|
|
8
|
+
# amap-cli
|
|
9
|
+
|
|
10
|
+
`amap-cli` 是一个基于高德开放平台 Web API 的纯命令行工具,面向终端环境和 AI Agent 使用。
|
|
11
|
+
|
|
12
|
+
## 功能特性
|
|
13
|
+
|
|
14
|
+
- 纯命令行调用高德地图 API
|
|
15
|
+
- 支持命令行写入和读取高德 API Key
|
|
16
|
+
- 支持两点直线距离计算
|
|
17
|
+
- 支持路径规划
|
|
18
|
+
- 支持 POI 搜索
|
|
19
|
+
- 所有命令统一返回机器可读 JSON
|
|
20
|
+
- 提供配套的 Agent skill,便于在智能体环境中直接调用
|
|
21
|
+
|
|
22
|
+
## 安装与使用
|
|
23
|
+
|
|
24
|
+
### 方式一:直接使用 `uvx` 运行
|
|
25
|
+
|
|
26
|
+
项目发布到 PyPI 后,可以直接执行:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
uvx amap-cli --help
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
配置高德 API Key:
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
uvx amap-cli config set --api-key <YOUR_AMAP_KEY>
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
路径规划示例:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
uvx amap-cli route \
|
|
42
|
+
--from 北京南站 \
|
|
43
|
+
--to 天安门 \
|
|
44
|
+
--type driving
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
直线距离示例:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
uvx amap-cli distance \
|
|
51
|
+
--from 116.397,39.909 \
|
|
52
|
+
--to 116.407,39.904
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
POI 搜索示例:
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
uvx amap-cli search-poi \
|
|
59
|
+
--keyword 星巴克 \
|
|
60
|
+
--city 北京 \
|
|
61
|
+
--pageSize 5
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### 方式二:安装后使用
|
|
65
|
+
|
|
66
|
+
如果希望安装到本机工具目录,执行:
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
uv tool install amap-cli
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
安装完成后可直接调用:
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
amap-cli --help
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
配置和业务命令示例:
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
amap-cli config set --api-key <YOUR_AMAP_KEY>
|
|
82
|
+
amap-cli distance --from 116.397,39.909 --to 116.407,39.904
|
|
83
|
+
amap-cli route --from 北京南站 --to 天安门 --type driving
|
|
84
|
+
amap-cli search-poi --keyword 星巴克 --city 北京
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## Skill 使用说明
|
|
88
|
+
|
|
89
|
+
本项目提供了配套的 `amap-cli` skill,适合在支持 skill 的 Agent 环境中使用。
|
|
90
|
+
|
|
91
|
+
- skill 的目标是让 Agent 直接通过 `uvx amap-cli` 调用本工具
|
|
92
|
+
- 使用方式与上面的“直接使用 `uvx` 运行”一致
|
|
93
|
+
- 使用前先配置高德 API Key,之后即可发起路径规划和 POI 搜索
|
|
94
|
+
- `distance` 命令在起终点都为坐标时可直接本地计算,不依赖 API Key
|
|
95
|
+
- 建议 Agent 直接解析命令返回的 JSON 结果
|
|
96
|
+
|
|
97
|
+
## 命令说明
|
|
98
|
+
|
|
99
|
+
### 配置
|
|
100
|
+
|
|
101
|
+
写入 API Key:
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
amap-cli config set --api-key <YOUR_AMAP_KEY>
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
查看当前配置:
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
amap-cli config show
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
配置会按照当前操作系统规范保存在用户配置目录中。macOS 下默认路径为:
|
|
114
|
+
|
|
115
|
+
```text
|
|
116
|
+
~/Library/Application Support/amap-cli/config.json
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### 路径规划
|
|
120
|
+
|
|
121
|
+
基础格式:
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
amap-cli route \
|
|
125
|
+
--from <结构化地址|地标名称|经度,纬度> \
|
|
126
|
+
--to <结构化地址|地标名称|经度,纬度> \
|
|
127
|
+
--type <driving|walking|riding|transit>
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
可选参数:
|
|
131
|
+
|
|
132
|
+
- `--from-name`
|
|
133
|
+
- `--to-name`
|
|
134
|
+
- `--waypoints`
|
|
135
|
+
- `--policy`
|
|
136
|
+
- `--strategy`
|
|
137
|
+
- `--city`
|
|
138
|
+
|
|
139
|
+
说明:
|
|
140
|
+
|
|
141
|
+
- `--waypoints` 和 `--policy` 仅 `driving` 支持
|
|
142
|
+
- `--strategy` 和 `--city` 仅 `transit` 支持
|
|
143
|
+
- 地理编码仅支持详细的结构化地址,以及地标性名胜景区、建筑物名称
|
|
144
|
+
- 当起点、终点或途经点使用上述名称并解析成功时,返回结果中的对应节点会附带 `formattedAddress`
|
|
145
|
+
- 对于其他较模糊的名称,建议先通过 `search-poi` 获取目标地点坐标,再调用 `route`
|
|
146
|
+
- 不支持 `--json` 输入
|
|
147
|
+
|
|
148
|
+
### 直线距离
|
|
149
|
+
|
|
150
|
+
基础格式:
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
amap-cli distance \
|
|
154
|
+
--from <结构化地址|地标名称|经度,纬度> \
|
|
155
|
+
--to <结构化地址|地标名称|经度,纬度>
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
可选参数:
|
|
159
|
+
|
|
160
|
+
- `--from-name`
|
|
161
|
+
- `--to-name`
|
|
162
|
+
|
|
163
|
+
说明:
|
|
164
|
+
|
|
165
|
+
- 当 `--from` 和 `--to` 都是坐标时,直接在本地计算直线距离
|
|
166
|
+
- 当任一输入为结构化地址或地标性名胜景区、建筑物名称时,会先调用高德地理编码接口解析坐标,再做本地计算
|
|
167
|
+
- 当输入为上述名称时,返回结果中的 `state.from.formattedAddress` / `state.to.formattedAddress` 会带上高德解析出的完整地址
|
|
168
|
+
- 对于其他较模糊的名称,建议先通过 `search-poi` 获取目标地点坐标,再调用 `distance`
|
|
169
|
+
- 结果中的 `summary.distance` 单位为米
|
|
170
|
+
- 不支持 `--json` 输入
|
|
171
|
+
|
|
172
|
+
### POI 搜索
|
|
173
|
+
|
|
174
|
+
基础格式:
|
|
175
|
+
|
|
176
|
+
```bash
|
|
177
|
+
amap-cli search-poi --keyword <关键词>
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
可选参数:
|
|
181
|
+
|
|
182
|
+
- `--city`
|
|
183
|
+
- `--center`
|
|
184
|
+
- `--radius`
|
|
185
|
+
- `--pageSize`
|
|
186
|
+
- `--pageIndex`
|
|
187
|
+
|
|
188
|
+
说明:
|
|
189
|
+
|
|
190
|
+
- 传入 `--center` 时执行周边搜索
|
|
191
|
+
- 未传入 `--center` 时执行关键词搜索
|
|
192
|
+
- 不支持 `--json` 输入
|
|
193
|
+
|
|
194
|
+
## 输出格式
|
|
195
|
+
|
|
196
|
+
成功时:
|
|
197
|
+
|
|
198
|
+
```json
|
|
199
|
+
{
|
|
200
|
+
"success": true,
|
|
201
|
+
"data": {},
|
|
202
|
+
"error": null
|
|
203
|
+
}
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
失败时:
|
|
207
|
+
|
|
208
|
+
```json
|
|
209
|
+
{
|
|
210
|
+
"success": false,
|
|
211
|
+
"data": null,
|
|
212
|
+
"error": {
|
|
213
|
+
"code": "INVALID_ARGUMENT",
|
|
214
|
+
"message": "错误说明",
|
|
215
|
+
"details": {}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
## 本地开发
|
|
221
|
+
|
|
222
|
+
安装项目依赖:
|
|
223
|
+
|
|
224
|
+
```bash
|
|
225
|
+
uv sync
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
本地运行:
|
|
229
|
+
|
|
230
|
+
```bash
|
|
231
|
+
uv run amap-cli --help
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
## PyPI 发布
|
|
235
|
+
|
|
236
|
+
### 1. 确认版本号
|
|
237
|
+
|
|
238
|
+
每次发布前,先更新 `pyproject.toml` 中的 `version`。
|
|
239
|
+
PyPI 不允许重复上传同一个版本号的分发包。
|
|
240
|
+
|
|
241
|
+
### 2. 构建分发包
|
|
242
|
+
|
|
243
|
+
```bash
|
|
244
|
+
uv build
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
构建成功后会在 `dist/` 目录下生成:
|
|
248
|
+
|
|
249
|
+
- `*.tar.gz`
|
|
250
|
+
- `*.whl`
|
|
251
|
+
|
|
252
|
+
### 3. 准备 PyPI Token
|
|
253
|
+
|
|
254
|
+
登录 PyPI 后创建 API Token,推荐通过环境变量传入:
|
|
255
|
+
|
|
256
|
+
```bash
|
|
257
|
+
export UV_PUBLISH_TOKEN="pypi-你的token"
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
### 4. 先发布到 TestPyPI 验证(推荐)
|
|
261
|
+
|
|
262
|
+
```bash
|
|
263
|
+
uv publish \
|
|
264
|
+
--publish-url https://test.pypi.org/legacy/ \
|
|
265
|
+
--check-url https://test.pypi.org/simple/
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
如果只是验证包能否被安装,可以执行:
|
|
269
|
+
|
|
270
|
+
```bash
|
|
271
|
+
uvx --index-url https://test.pypi.org/simple/ amap-cli --help
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
### 5. 发布到正式 PyPI
|
|
275
|
+
|
|
276
|
+
确认 TestPyPI 验证通过后,执行:
|
|
277
|
+
|
|
278
|
+
```bash
|
|
279
|
+
uv publish
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
### 6. 发布后验证
|
|
283
|
+
|
|
284
|
+
发布完成后,推荐优先使用 `uvx` 做一次快速验证:
|
|
285
|
+
|
|
286
|
+
```bash
|
|
287
|
+
uvx amap-cli --help
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
发布后,推荐优先使用 `uvx amap-cli` 进行一次性调用,或使用 `uv tool install amap-cli` 安装到本地。
|