openlang

可以限制扩展的依赖要求吗...?

我想知道能不能控制扩展的依赖…

下面是我遇到的一个情况。

有一个 Q 包,它有一些依赖。它属于那种既定义接口,又提供同一个接口的多种实现的包。那些实现需要 HTTP 1 之类的依赖才能工作。

我现在正在开发 R 包。它基本完成了,我想为 Q 写一个实现 R 接口的扩展,就叫 QRExt。Q 不需要 HTTP,所以我不想把这些依赖加入 Q 的依赖列表。不过 QRExt 扩展本身确实需要依赖 HTTP 才能工作。目前没有问题,因为 Q 已经依赖 HTTP,所以加载 Q 就能使用 HTTP,QRExt 也能成功导入它。

问题在于,这种安排是偶然的,也可能改变。将来 Q 可能把 HTTP 依赖升级到 2。随后 QRExt 导入 HTTP 时期待的是(1),拿到的却是 HTTP 2,于是就坏了。在“加载 Q 就能使用 HTTP”这个假设里,根本问题是没有任何东西明确要求这个假设一直成立。

我想听听该怎么处理的建议。

从英语翻译查看原文

后续讨论 2

顺着彼此的依据读下去
  1. 固定链接

    我觉得 weakdep 机制能提供你这里需要的大部分行为,不过 Q 迁移到 HTTP 2 时,仍有一些细节需要考虑。到时得更新 R 的 compat 条目,让 QRExt 能解析使用 HTTP 2 的新版 Q。我觉得这样挺合理,也很可能就是预期的结果?

    从英语翻译查看原文
  2. 固定链接

    如果 Q 不依赖 HTTP,就不要写你的

    RQExt(我喜欢把被扩展的包放在前面)

    而是可以写 RQHTTPExt

    这样 R 就能在主项目文件中限制 HTTP 的 compat

    从英语翻译查看原文

同一个问题的其他角度

  1. 减少 docker-compose 的控制台输出

    在开发环境里用 docker-compose up 启动所有服务时,我的几个容器会输出几百行又几百行内容。有没有方便的办法过滤这些输出,或者更好一些,让这些服务在 docker-compose up 运行时不要写到标准输出?

    回复 3最近活动 bash
  2. 能否用 D 代替 C 编写 Python 扩展模块?

    看来 D 能与 C 链接。我想用 D 编写 Python 扩展模块。我是不是漏掉了什么原因,导致这种方法根本无法运行?

    回复 2最近活动 d
  3. 通过 Nix 声明 Micro 插件?🤔

    python 可以这样写。 Python.withPackages (q: with q; [ fastapi ]) Micro 编辑器有类似的机制吗? 能不能把 micro 编辑器的软件包和插件一起指定?:thinking: 那样会方便很多。

    回复 3最近活动 nix