c_extensions
内置扩展库清单、可用范围和替代建议。
内置 C 扩展库清单、可用范围与替代建议。文档页,不是可导入模块。
边界:不要写import c_extensions。第三方含 C/Rust/native 扩展的包,仅已内置或当前环境能安装的可用;opencv、torch、scipy等桌面常见包通常无法直接 pip 到 iOS。优先用内置包、纯 Python 或 PythonIDE 原生模块。
#模块概览
| 项 | 说明 |
|---|---|
| 导入 | 无;使用真实包名如 import numpy |
| 适合做什么 | 判断能否 import、选替代路线、写降级逻辑 |
| 调用时机 | 脚本开头 try/except ImportError |
| 推荐顺序 | 查下表 → 尝试 import → 失败则换路线 |
| OCR/ML | 用 vision、coreml,非 pip 装 CV 包 |
#快速开始
安全使用已内置的 numpy:
已复制
try:
import numpy as np
except ImportError:
np = None
values = [1, 2, 3, 4, 5]
if np is None:
mean = sum(values) / len(values)
else:
mean = float(np.array(values).mean())
print(mean)
#AppUI 示例
在界面展示「内置包可用 / 未内置包需替代」的检查结果(逻辑放按钮回调)。
已复制
import appui
state = appui.State(
numpy_ok="—",
cv2_ok="—",
hint="点击检查",
)
BUILTIN_TRY = [
("numpy", "numpy_ok"),
("cv2", "cv2_ok"),
]
def check_imports():
for module, attr in BUILTIN_TRY:
try:
__import__(module)
setattr(state, attr, "可导入")
except ImportError:
setattr(state, attr, "未内置")
if state.numpy_ok == "可导入":
state.hint = "数组统计可用 numpy"
elif state.cv2_ok == "未内置":
state.hint = "图像处理请用 vision / vision_helper / coreml"
else:
state.hint = "检查完成"
def body():
return appui.NavigationStack(
appui.Form([
appui.Section("检查", [
appui.Button("检查常见包", action=check_imports)
.button_style("bordered_prominent"),
]),
appui.Section("结果", [
appui.LabeledContent("numpy", value=state.numpy_ok),
appui.LabeledContent("cv2", value=state.cv2_ok),
appui.Text(state.hint).foreground_color("secondaryLabel"),
], footer="c_extensions 是文档索引,不是 import 名。"),
]).navigation_title("C 扩展")
)
appui.run(body, state=state)
#API 参考
#已内置 C 扩展库(节选)
| 包 | 典型用途 |
|---|---|
numpy | 数组、矩阵、统计 |
pandas | 表格数据处理 |
matplotlib | 绘图(亦可 AppUI Chart) |
cryptography / bcrypt / argon2-cffi | 加密与哈希 |
msgpack / msgspec / ujson / rapidjson | 高性能序列化 |
zstandard / xxhash | 压缩与哈希 |
PyYAML / ruamel.yaml | YAML |
regex / tornado / httptools | 工具库 |
完整列表见应用内文档生成源;新增内置包以运行时为准。
#常见未内置包
cv2、opencv、scipy、scikit-learn、sklearn、tensorflow、torch、torchvision、lxml、psutil、h5py、numba、cython、gevent 等。
#替代路线
| 需求 | 优先选择 |
|---|---|
| 数组、统计 | numpy、pandas |
| 绘图 | matplotlib、appui Chart |
| OCR、条码、人脸 | vision、vision_helper |
| 图片分类模型 | coreml |
| 哈希、压缩 | xxhash、zstandard |
| iOS 设备能力 | 对应原生模块 |
#降级模式
已复制
try:
import numpy as np
except ImportError:
np = None
def mean_value(values):
if np is None:
return sum(values) / len(values)
return float(np.array(values).mean())
#常见错误
| 错误写法 | 后果 | 修正 |
|---|---|---|
import c_extensions | 模块不存在 | 使用真实包名 |
| 桌面 pip 经验直接套 iOS | 安装失败 | 查内置表或换原生模块 |
无 ImportError 处理 | 脚本直接崩溃 | try/except + 纯 Python 降级 |
| 用未内置 CV 包做 OCR | 不可用 | vision |
#相关文档
| 文档 | 用途 |
|---|---|
| coreml | 端侧图像模型 |
| vision_helper | Vision 检测 API |
| 原生能力入口 | iOS 模块索引 |
#先选路线
| 路线 | 何时选 |
|---|---|
| 内置原生模块 | 优先查 iOS 原生能力 |
| pip / 纯 Python | 仅在沙盒允许且已有 wheel 时 |
| C 扩展编译 | 仅高级场景;先评估维护成本 |
#发布前检查
- 确认目标能力是否已有官方模块或 AppUI 组件
- 在真机验证权限、离线场景与失败返回值
- 不要把未审核的扩展当作 App Store 可发布方案
#预期效果
运行示例后,界面应出现文档描述的目标结果;若与预期不符,先看「失败路径」并按返回值或日志排查。