У меня есть пакет с именем jiva_tasks
, который я пытаюсь импортировать через celery (используя атрибут CELERY_IMPORTS
celeryconfig. Оператор импорта, который использует celery, таков:
__import__(module, [], [], [''])
Как ни странно, когда используется этот синтаксис, модуль импортируется дважды , один раз как jiva_tasks
, а другой как jiva_tasks.
(с точкой в конце). Теперь велика вероятность, что сельдерей должен проходить в глобальных, а не в пустых списках, но мне это кажется неработоспособным. Кажется странным, что даже если заданы неправильные аргументы, __import__
будет импортировать что-то, что не является допустимым именем модуля Python.
Я знаю, что способ исправить это - передать globals
, но я хочу понять, почему я получаю этот результат. Это ошибка, или я что-то не понимаю в том, как работает __import__
Обновление : Кажется, это также работает нормально, если я использую importlib
.
Обновление 2 : Вот sys.meta_path
и sys.import_path
прямо перед выполнением строки __import__
:
>>> sys.meta_path
[]
>>> sys.path_hooks
[<type 'zipimport.zipimporter'>]
Мне не кажется, что есть что-то необычное. Тем не менее, я только сейчас понял, что импортируемый пакет устанавливается с помощью команды разработки setuptools. Это имеет значение?