PCART-tools/PCResolve
GitHub: PCART-tools/PCResolve
PCResolve 是一个 Python 项目级别的静态分析器,用于追踪 API 调用表达式的第三方库来源并提供可解释的溯源信息。
Stars: 0 | Forks: 1
# PCResolve
[](https://pypi.org/project/pcresolve/) [](https://opensource.org/licenses/MIT)
## 新闻
- **2026-05-28** - PCResolve 1.0.4 已发布:稳定的溯源 JSON 契约,默认使用 `scope_model="v2"`,完整的 `--json` 输出,扩展的真实项目回归基线,以及 Windows 安全的审计/门控工具。
## 什么是 PCResolve?
PCResolve 是一个 Python 项目级别的第三方库使用来源分析器。它是一个可解释的静态分析工具,用于将 Python API 调用表达式追踪到其最可能的原始库。
它可以回答以下问题:
- 这个项目调用了哪些第三方库?
- 哪个调用表达式属于 `numpy`、`requests`、`flask`、`sklearn` 或其他顶级库?
- 局部符号、返回值、属性、参数或容器元素是如何获得第三方来源的?
- 分析在哪些地方是确定的,在哪些地方存在多个可能的来源?
PCResolve 专为 CI pipeline、审计工作流、IDE 集成和大规模代码库扫描而设计。它在运行时没有任何第三方依赖,并支持 Python 3.9+。
## 快速开始
```
pip install pcresolve
pcresolve /path/to/project
```
获取机器可读的输出:
```
pcresolve /path/to/project --json
```
## 使用说明
### CLI
```
pcresolve /path/to/project # human-readable summary
pcresolve /path/to/project --json # full provenance JSON
pcresolve /path/to/project --json-summary # compact JSON summary
pcresolve /path/to/project --explain-library numpy
pcresolve /path/to/project --explain-call "np.array"
pcresolve /path/to/project --explain-symbol df
```
### Python API
```
from pcresolve import analyze_project
result = analyze_project("/path/to/project")
for call in result.all_api_calls:
print(call.expression, "->", call.top_library)
print("reason:", call.reason)
print("confidence:", call.confidence)
```
## 输出
PCResolve 1.0.4 是第一个稳定的来源契约版本。默认的 scope 模型是 `v2`,`--json` 会返回完整的来源 schema。
主要输出部分包括:
| 部分 | 描述 |
|---------|-------------|
| `all_api_calls` | 包含源码位置、解析出的所有者、原因、置信度、备选项和装饰器证据的每个调用表达式。 |
| `all_symbol_provenance` | 导入、变量、参数、返回值、属性、容器项和装饰器的来源记录。 |
| `library_usage` | 按库聚合的调用、符号、文件、原因计数和置信度范围。 |
| `diagnostics` | 非致命的解析、编码和追踪诊断信息。 |
有关完整的 JSON 契约,请参阅 [docs/output-contract.md](./docs/output-contract.md)。
## 分析能力
PCResolve 同时追踪 API 调用来源和符号来源。
支持的模式包括:
- 直接导入、别名、通配符导入和重新导出;
- 通过本地模块进行跨文件符号追踪;
- 函数返回值传播和参数绑定;
- 类构造、实例属性和方法调用来源;
- dict/list/tuple/set 容器项和迭代;
- 装饰器调用和 `decorated_by` 证据;
- 通过 `alternatives` 报告模糊流,而不是静默猜测。
`top_library` 表示调用表达式中的可调用对象或接收器对象的主要所有者。附加的证据会通过 `alternatives`、`decorated_by` 和符号来源记录等字段单独报告。
## 验证
1.0.4 版本通过了以下验证:
```
pytest: 557 passed
hard baselines: 21 projects, 0 exceeded
full audit: 42 real-world projects, 0 crashes, 0 illegal keys
```
回归门控检查会确保库的键保持干净、golden JSON 输出保持稳定,并且真实项目的基线计数不超过已记录的契约。
## 局限性
PCResolve 在设计上是静态的。它不执行项目代码,也不对任意的运行时反射、monkey patching、动态导入、描述符或完整的第三方库内部结构进行建模。
当无法确信地确定单一来源时,PCResolve 会报告保守的结果并保留替代证据,而不是选择一个不受支持的库所有者。
## 文档
- [输出契约](./docs/output-contract.md)
- [架构](./docs/architecture.md)
- [追踪契约](./docs/trace-contract.md)
- [源码语义](./docs/source-semantics.md)
- [真实项目验证](./docs/real-project-validation.md)
## 开发
```
pip install -e .
python -m pytest tests/ -v
python scripts/diff_v1_v2.py tests/fixtures/tested_projects/
python scripts/audit_tested_projects.py
```
PCResolve 在运行时仅使用 Python 标准库。测试使用 pytest。
## 许可证
PCResolve 基于 MIT 许可证授权。详情请参阅 [LICENSE](./LICENSE)。
标签:Python, 云安全监控, 安全规则引擎, 无后门, 第三方库溯源, 逆向工具, 静态分析