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

Я создал файл python egg для импорта ряда моих модулей python в кластер блоков данных Azure.

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

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

import module2

print('hello, this is module 1')

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

print('hello, this is module 2')

Обратите внимание, модуль1 импортирует модуль2.Module2 ничего не импортирует.

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

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

я получаю ошибку: ImportError: No module named 'module2'

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 30 ноября 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 Я подтвердил, загрузив в блоки данных и затем применив те же изменения к моему реальному проекту, и все работает.

0 голосов
/ 30 ноября 2018

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

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

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

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

...