我有以下文件夹层次结构。
apriltag
python
apriltag.py
my_notebook.ipynb
我只想将apriltag.py导入我的Jupyter Notebook。我试过这样做..
import sys
import os.path
sys.path.append(os.path.dirname(os.path.realpath('__file__')) + "/apriltag/python")
import apriltag
但是,当我尝试从apriltag
访问一个类时,就像这样:
print(apriltag.Detector)
我收到以下错误:
AttributeError Traceback (most recent call last)
<ipython-input-74-d1254ec9a372> in <module>()
12 import apriltag
13
---> 14 print(apriltag.Detector)
AttributeError: module 'apriltag' has no attribute 'Detector'
建议未正确导入模块。我也尝试在__init__.py
目录的根目录创建python
,但同样的事情发生了。
答案 0 :(得分:2)
好的,我会稍早嗡嗡作响。我可以解决你的问题。如果我不这样做,我们可以回去搞清楚。
正如您所见,docs说
包含正在运行的脚本的目录位于搜索路径的开头
现在,您正在运行my_notebook.ipynb,因此它的目录是搜索路径的最开始。并且您可能在apriltag目录中有一个__init__.py
文件,该文件位于同一级别。因此,它被发现作为一个模块,并加载。并且该“模块”中没有.py文件,而__init__.py
中没有任何内容,因此它将作为空模块加载。
相反,不要尝试修改sys.path目录,只需在apriltag和python目录中创建空的__init__.py
文件。
然后,您应该能够执行以下操作:
from apriltag.python import apriltag
导入的apriltag应该是您需要的。 (dir(apriltag)
会给你更好的结果。)
通常,我总是在空__init__.py
的目录中设置我的所有代码,并使用from
语法调用它们。它使模块更容易处理。