无法从不同目录导入python文件

时间:2017-09-29 17:14:28

标签: python jupyter-notebook python-module

我有以下文件夹层次结构。

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,但同样的事情发生了。

1 个答案:

答案 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语法调用它们。它使模块更容易处理。

相关问题