Я хочу импортировать пользовательский модуль в свой блокнот Jupyter в Sagemaker. Пытаясь импортировать из Untitled1.ipynb, я пробовал две разные структуры. Первый:
Внутри «папки пакета» находились файлы «cross_validation.py» и «в этом.py». Были опробованы следующие команды:
from package import cross_validation
import package.cross_validation
Второй
и я закодировал import cross_validation
В обоих случаях я не получаю никакой ошибки при импорте, но я не могу использовать класс внутри модуля, потому что я получаю имя ошибки Class_X is not defined
Я также перезагрузил ноутбук на всякий случай, и он все еще не работает. Как я мог это сделать?
Вы можете добавить файл __init__.py
в свой каталог package
, чтобы сделать его пакетом Python. Затем вы будете импортировать модули из пакета в свой блокнот Jupyter.
/home/ec2-user/SageMaker
-- Notebook.ipynb
-- mypackage
-- __init__.py
-- mymodule.py
Содержимое Notebook.ipynb
from mypackage.mymodule import SomeClass, SomeOtherClass
Дополнительные сведения см. в статье https://docs.python.org/3/tutorial/modules.html#packages.
Благодарим за использование Amazon SageMaker!
Нельзя ли импортировать пользовательские модули в ядро sparkmagic?
Если вам также нужно импортировать файлы из родительских каталогов, вы можете добавить к пути как таковой:
import os
import sys
module_path = "/home/ec2-user/SageMaker/{module_name}"
if module_path not in sys.path:
sys.path.append(module_path)
Затем вы можете импортировать, как если бы вы были в нормальная среда питона из корня вашего проекта.
Если вы используете SageMaker Studio, вам нужно позаботиться о пути.
В блокнот SageMaker Studio:
!df -h
, Вы увидите строку:
127.0.0.1:/200005 8.0E 1.3G 8.0E 1% /root
А !pwd
будет:
/root
Он отличается от Баш-терминал:
В баш-терминале:
df -h
127.0.0.1:/200005 8.0E 1.4G 8.0E 1% /home/sagemaker-user
pwd
/home/sagemaker-user
Таким образом, внешний путь к файлу «/home/sagemaker-user» будет сопоставлен с «/root» в ваших блокнотах в SageMaker Studio.
Итак, путь к модулю изменится:
import sys
sys.path.append('/root/module_name')
Подробная информация может ссылаться на этот связь
В sagemaker с ядром sparkmagic это не работает.