Файлы библиотеки Python Egg, ссылающиеся на другие файлы в том же пакете

Я создал файл яйца Python для импорта ряда моих модулей Python в кластер Azure databricks.

Некоторые файлы внутри пакета ссылаются на другие файлы внутри того же пакета. Установил локально, все отлично работает. Когда я загружаю пакет в базу данных Azure и пытаюсь использовать свою импортированную библиотеку, я получаю ошибки импорта модуля.

Например: module1 выглядит так

import module2

print('hello, this is module 1')

модуль 2 выглядит так

print('hello, this is module 2')

Обратите внимание, module1 импортирует module2. Module2 ничего не импортирует.

Я пытаюсь импортировать module1 в файл py рабочей области, и когда я запускаю эту ячейку, я получаю сообщение об ошибке ImportError: No module named 'module2' '

Из записной книжки в блоках данных, когда я запускаю этот код: from myLibrary import module1

Я получаю сообщение об ошибке: ImportError: No module named 'module2'

Если я запустил это: from myLibrary import module2

Работает нормально

Я проверил, что module2 включен в пакет egg. Я загрузил пример всего, кроме базы данных Azure, конечно, на github GitHub Sample Это работает с использованием среды выполнения python3.

Пожалуйста, дайте мне знать, если есть дополнительная информация, необходимая для понимания проблемы, и я буду рад отредактировать вопрос и предоставить ее.


person Ed Boykin    schedule 29.11.2018    source источник
comment
Вы выполняете задание на Python, а не на записной книжке?   -  person simon_dmorias    schedule 30.11.2018
comment
Ноутбук. В записной книжке выполняю from myLibrary import module1' and get the error about module2 not found, when I execute from the same notebook 'from myLibrary import module2 ошибки нет   -  person Ed Boykin    schedule 30.11.2018


Ответы (2)


Я подозреваю, что это проблема с pythonpath (а вы выполняете как Python Job). В module1 я бы добавил:

spark = SparkSession.builder.getOrCreate()
spark.sparkContext.addPyFile("dbfs:/path/module2.py")

Это позволит всем узлам, где находится файл.

Вместо файла py вы можете ссылаться на zip-файл с большим количеством скриптов - просто убедитесь, что они находятся в единой структуре папок внутри zip.

person simon_dmorias    schedule 30.11.2018

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

Отвечаю, что у меня мозги сжаты. Ссылаясь на пример в моем исходном вопросе, в моей библиотеке было два модуля python, module1 и module2

module2 выглядит так:

print('Hi, I'm module 2')

module1 выглядит так:

import module2
print('Hi, I'm module 1')

Если вы импортируете module1 в файл py, вы должны увидеть это:

Привет, я модуль 2

Привет, я модуль 1

Теперь посмотрим на код для module1. В частности, обратите внимание на мой оператор импорта. Вот где проблема. мой новый файл py не имеет module2, и интерпретатор python по умолчанию не смотрит внутрь того же модуля, по-видимому (если это нужно, ПОЖАЛУЙСТА, дайте мне знать. Я не смог найти его в документах)

В любом случае, правильный оператор импорта должен был быть from MyLibrary import module2 Я подтвердил, загрузив его в блоки данных, а затем применив те же изменения к моему фактическому проекту, и все работает.

person Ed Boykin    schedule 30.11.2018