重复标志错误:该标志定义了两次:第一次在包中,第二次在包内的模块中

Soh*_*hil 1 python flags module package python-3.x

堆栈跟踪非常清楚错误的原因。但我无法弄清楚根本原因。我有一个包 abc,包内有一个名为 abc.py 的模块。在 abc.py 中,我定义了 Flags 。当我运行代码时,我收到一条错误消息DuplicateFlag Error: The flag 'config' is defined twice: First from abc, Second from abc/abc.py.

我没有在其他文件中导入模块 abc.py 。python专家可以告诉我可能是什么问题吗?

Soh*_*hil 6

我不确定是什么导致了这个问题。但解决方法是在使用以下代码实际定义标志之前删除标志中的所有属性:

for name in list(flags.FLAGS):
      delattr(flags.FLAGS,name)
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助。欢迎知道问题真正原因的人准确回答。

更新:此Running a module in a package, importing a subpackage部分回答了原因。结论是:如果您经常将模块作为脚本运行,您可能应该创建一个新的顶级脚本模块,从包中导入模块并运行所需的代码。这可以防止充满代码的模块可能存在两次,并且还可以让您受益于从 .pyc 文件加载的缓存字节码(这可能会使您的程序启动速度更快一些)。

我的包有循环依赖。因此这可能是问题所在。将主脚本移出包并正常运行后,我什至不需要删除该属性。