Ошибка дублирования флага: флаг определяется дважды: первый в пакете и второй в модуле внутри пакета

Функция stacktrace довольно ясно указывает на причину ошибки. Но я не могу понять первопричину. У меня есть пакет abc, и в нем есть модуль под названием abc.py. В abc.py я определил флаги. Когда я запускаю код, я получаю сообщение об ошибке DuplicateFlag Error: The flag 'config' is defined twice: First from abc, Second from abc/abc.py.

Я не импортировал модуль abc.py в другие файлы. Может ли эксперт по питону сказать мне, в чем может быть проблема?


person Sohil    schedule 27.02.2019    source источник


Ответы (1)


Я не уверен, в чем проблема. Но исправление состоит в том, чтобы удалить все атрибуты в флагах до того, как вы фактически определите флаги, используя следующий код:

for name in list(flags.FLAGS):
      delattr(flags.FLAGS,name)

Надеюсь, это поможет. Любой, кто знает настоящую причину проблемы, может дать точный ответ.

ОБНОВЛЕНИЕ: причина частично решена в этом Запуск модуля в пакет, импортируя подпакет. Вывод: если вы часто запускаете модуль как сценарий, вам, вероятно, следует создать новый модуль сценария верхнего уровня, который импортирует модуль из пакета и запускает желаемый код. Это предотвращает возможное двойное существование модуля, заполненного кодом, а также позволяет вам получить выгоду от загрузки кэшированного байт-кода из файла .pyc (что может немного ускорить запуск вашей программы).

У моего пакета была циклическая зависимость. Следовательно, это может быть проблемой. Мне даже не нужно было удалять атрибут после того, как я вынес свой основной скрипт из пакета и запустил его в обычном режиме.

person Sohil    schedule 04.03.2019