【问题标题】:Unable to import python file from different directory无法从不同目录导入 python 文件
【发布时间】:2018-03-11 15:44:59
【问题描述】:

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

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'

提示模块未正确导入。我也尝试在python 目录的根目录下创建__init__.py,但发生了同样的事情。

【问题讨论】:

  • from apriltag import Detector 工作吗?
  • dir(apriltag) 可能会告诉你很多。
  • @TreytenCarey cannot import name 'Detector'
  • @ScottMermelstein 这是输出['__doc__', '__loader__', '__name__', '__package__', '__path__', '__spec__'] 不知道如何解释它
  • 这是一个空模块。接下来我要检查的是print(apriltag.__path__),看看它是指向apriltag/python/apriltag.py,还是只是apriltag。 (将 dir 和 path 的结果与通过检查 sys 或其他导入良好的东西得到的结果进行比较。dir(sys)print(sys.__path__) 会让你知道要做什么预计何时正确加载。

标签: python jupyter-notebook python-module


【解决方案1】:

好的,我会稍早一点。我可能有你的问题的解决方案。如果我不这样做,我们可以回去弄清楚。

您可能已经看到,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 语法调用它们。它使模块更容易处理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-03
    • 1970-01-01
    • 2020-09-10
    • 2021-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多