3

我有一个项目需要创建/读取其他项目生成的 protobuf 文件。

我希望dlprimitives能够读取格式为ONNX protobufCaffe protobuf的文件

将它们包含到项目中的最佳方法是什么:

  1. 从原始存储库复制文件,并使用自述文件引用更新源
  2. 制作 caffe/onnx 外部子项目
  3. 在构建时按需下载它们

我的想法:

  1. 是纯副本不知道它对更新有什么好处
  2. 创建巨大的子项目并增加单个文件的克隆时间,因为不可能有一个单一文件的子项目
  3. 假设构建环境可以访问互联网。

有什么更好的政策?一般是怎么解决的?

4

2 回答 2

2

你所有的方法都是有效的。

  1. 协议缓冲区在设计上是向前或向后兼容的,因此手动更新是可以的。您可以通过记录任务或提供脚本/任务来缓解问题。

  2. 外部子项目也可以,但您仍然必须手动更新它们(在 git 子模块的情况下)并处理原始项目中更改的路径。您可能需要考虑联系项目并建议将格式描述与主项目分开。

  3. 在这种情况下,通常代理或缓存会有所帮助。现在很少有项目在没有外部依赖的情况下构建。

最后,您应该考虑您的目标受众是什么。也许您可以从他们那里获得一些反馈,他们将如何使用您的项目?

于 2021-12-20T10:34:21.113 回答
1

ONNX 和 Caffe 是 protos 的真实来源,我不鼓励您制作 protos 的副本(因为副本是不确定的)。

对于@eik 的第二点,我认为 protobuf 维护者将 protos 保存在不同的 repos 中是一个很好的做法,以便这些 repos 更容易集成。我认为这应该被认为是最佳实践,但很少这样做。有时,protobuf 维护人员会在每次 proto 更改时生成多语言源代码,但这只是节省了固定成本,当然,您可以随时自己生成 SDK。

您引用的任何一个原型都没有与 repo 明显不同的版本。这也应该是最佳实践。

您应该为您的构建按需克隆|重新创建第 3 方原始存储库,保留存储库的参考并为您需要的任何语言构建客户端。这会保留原始合同(可能是版本化的)并与您(!)生成的客户端副本同步。

使用您语言的包导入来导入客户端 (pacakges)。例如,使用 Golang,您可以添加replacego.mod例如重定向https://github.com/onnx/onnx到您生成的客户端的副本。

于 2021-12-20T18:39:03.690 回答