构建可扩展Python库:赋能开发者编写代码的技术实践

让开发者编写代码(PyCon India 2019 主题演讲)

演讲者:Ines Montani @_inesmontani

关于某机构

  • spaCy:用于工业级自然语言处理的开源库(10万用户)
  • Prodigy:为机器学习模型创建训练数据的标注工具(2500+用户)
  • 某机构:专注于人工智能和自然语言处理开发者工具的软件公司(6名开发者)

核心理念

开发者终归要开发。好工具帮助人们完成工作。你不需要替他们完成工作。

  • 最差的开发者体验:那些试图成为“完全集成解决方案”的工具。
  • 更好、更便宜、更容易。

库的可扩展性

  • 所有库都是可扩展的吗?毕竟人们用它们写代码。
  • 有些库比其他的更可扩展。库并不总是提供可组合的基元。

案例:词形还原

  • 原句:are, going, swimming, should, go
  • 目标:go, swim

库是否应该处理这类问题,以免用户重复编写相同代码?

  • “这类问题”的集合可能比你想象的要大,而且不断增长。

支持格式的陷阱

  • 初始支持:.json.CSV.TXT
  • 增加:MYSQLSQLITE
  • 用户问:它支持MongoDB吗?
  • 结果:库不断增加对新格式的原生支持,负担越来越重。

跳出框架思考

  • 问题:你的工具能与X集成吗?
  • 更好的方法:开发者能在Python中与X集成吗?如果开发者能自助解决问题,他们会快乐得多。

实用技术建议

  1. 回调函数
  2. 函数注册表
  3. 单分派泛型函数(PEP 443)
  4. 入口点
  5. 避免I/O操作

一个可扩展的设计模式

function registry (and entry point)
        ↓
let user do I/O
        ↓
iterable of dicts (list, generator)
        ↓
callback function

常见质疑与回应

  • 质疑: 但这看起来太复杂了!简单的系统演示起来容易得多!
    • 回应: 尝试邀请他们的工程师参加演示。这对双方是双赢。
  • 质疑: 但我们想赢得客户,并尽可能多地提供功能!
    • 回应: 如果你销售“全部或没有”,用户如果不想要“全部”,就只能选择“没有”。
  • 质疑: 但我们希望工具易于学习。用户为什么需要知道所有这些其他Python知识?
    • 回应: 背景知识容易学习,它具有通用性且有很好的资源。难以掌握的是工具特定的知识。
  • 质疑: 但这不具有排他性吗?不会编程的人怎么办?
    • 回应: 如果工具是可编程的,他们仍然可以从生态系统中受益。(例如,通过图形界面使用由可编程工具构建的模型训练器)。

编码者与非编码者?

  • 让技术对与你不同的人变得可访问 ≠ 替他们想到他们可能想要的一切并全部提供给他们。
  • 不要将世界划分为“编码者”和“非编码者”。

来自开源的启示

  • 开源工具一次又一次地击败了闭源软件(尽管面临巨大劣势)。
  • 为什么?因为它们是可编程的。
  • 赚钱和构建闭源系统没问题。但要吸取这个教训。

结语

  • 某机构网址:explosion.ai
  • 推特:@_inesmontani
    更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)或者 我的个人博客 https://blog.qife122.com/
    对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)

公众号二维码

公众号二维码

posted @ 2026-01-13 19:59  CodeShare  阅读(2)  评论(0)    收藏  举报