在Amazon Sagemaker Jupyter笔记本中导入自定义模块

时间:2019-05-22 15:52:03

标签: python import jupyter-notebook amazon-sagemaker

我想在Sagemaker的jupyter笔记本中导入自定义模块。尝试从Untitled1.ipynb导入,我尝试了两种不同的结构。第一个是:

enter image description here

在“包文件夹”中有文件“ cross_validation.py”和“ init .py”。尝试了以下命令:

from package import cross_validation
import package.cross_validation

第二个是

emak

我已经编码了import cross_validation

在两种情况下,导入时都完全没有错误,但是由于收到错误名称Class_X is not defined

,所以无法使用模块中的类

我还重新启动了笔记本电脑,以防万一它仍然无法正常工作。我该怎么做?

3 个答案:

答案 0 :(得分:1)

您可以将__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!

答案 1 :(得分:1)

如果使用SageMaker Studio,则需要注意路径。

在SageMaker Studio的笔记本中:

?- replace(put(hi,table,aside(hi(dont,replace),hi)),X). X = put(bye, table, aside(hi(dont, replace), bye)) ,您将看到以下行:

!df -h

127.0.0.1:/200005 8.0E 1.3G 8.0E 1% /root 将是:

!pwd

它不同于 bash终端

在bash终端中:

/root

因此,外部文件路径“ / home / sagemaker-user”将被映射到SageMaker Studio下笔记本中的“ / root”。

因此,模块路径将更改:

df -h
127.0.0.1:/200005  8.0E  1.4G  8.0E   1% /home/sagemaker-user

pwd
/home/sagemaker-user

详细信息可以参考此link

答案 2 :(得分:0)

如果还需要从父目录导入文件,则可以这样添加路径:

import os
import sys
module_path = "/home/ec2-user/SageMaker/{module_name}"
if module_path not in sys.path:
    sys.path.append(module_path)

然后,您可以从项目的根目录导入,就像在普通的python环境中一样