我有一个
foo.proto
文件,该文件使用 protoc
编译为 python,并包含在 python 包中,然后将其内置到轮子中进行分发。
有没有办法在此生成的
foo_pb2.py
文件中包含版权声明序言?该文件的当前标题对我来说是这样的:
# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: foo.proto
例如我想要类似的东西
# Copyright (c) 2024 charlestoncrabb. All Rights Reserved.
# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: foo.proto
我觉得我不能忽略那里的
DO NOT EDIT!
部分并手动(或轮子构建过程的一部分)在上面插入我自己的版权声明:)但也许我可以?
或者既然有
source: foo.proto
部分,是否也可以将 foo.proto
文件包含在 python 包中,并在该文件的顶部添加版权声明?
这似乎是一个常见问题,但我在网上找不到任何与此相关的指导/最佳实践;感谢任何帮助!
原则上,您不会分发 protoc 生成的源代码。相反,您可以分发 .proto 文件(在注释中包含您喜欢的任何版权声明),并且您指定/提供的构建系统调用 protoc 来按需生成源代码。
至少,这个想法是这样的。不过上次看的时候发现有点问题。由于 Google 现在在协议编译器本身的源代码中包含了一些内容,许多 Linux 发行版似乎落后于 GPB 的水平。
具体来说就是 Abseil,libabsl,这是 Google 关于如何在标准 C++ 库上进行改进的想法。 Google 似乎使用它的方式是,它被编译为使用它的应用程序的一部分(在本例中为协议),这显然让 Linux 发行版的生活变得有点困难。请参阅这里有点旧的讨论。当然,当我最近从作为 Ubuntu 标准部分提供的软件包安装 protoc 时,我得到的版本是古老的。
我认为问题在于 libabsl 成为生成代码的依赖项,如果您的应用程序使用另一段也依赖于 libabsl 的代码,您可能会遇到代码无法编译的情况,因为您需要同一库的不同版本。我还遇到了 C++/14、C++/17 等问题; libabsl 使用了一个,我正在使用另一个,我们无法在中间相遇(或类似的事情)。请参阅示例问题在 GitHub 上
最重要的是,依靠接收者能够可靠地获取协议/GPB的所有依赖项现在是相当困难的工作。