堆栈跟踪非常清楚错误的原因。但我无法确定根本原因。我有一个包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专家可以告诉我可能是什么问题吗?
我不确定是什么导致了这个问题。但是它的修复是在使用以下代码实际定义标志之前删除标志中的所有属性:
for name in list(flags.FLAGS):
delattr(flags.FLAGS,name)
我希望这有帮助。任何知道问题实际原因的人都欢迎回答。
更新:原因在这个Running a module in a package, importing a subpackage部分回答。需要注意的是:如果您将模块作为脚本运行很多,您可能应该创建一个新的顶级脚本模块,从模块中导入模块并运行所需的代码。这可以防止模块中充满代码可能存在两次,并且还可以让您从.pyc文件加载的缓存字节码中受益(这可能会使您的程序启动速度更快)。
我的包有循环依赖。因此,这可能是问题所在。我将主脚本从包中移出并正常运行后,甚至不需要删除该属性。