具有绝对导入和相对导入的ImportError

时间:2019-11-13 11:54:32

标签: python python-3.x

使用非常简单的文件结构导入时遇到麻烦。

我的文件结构如下:

project/
  ...
  project.py
  helper.py
  __init__.py
  ...

在project.py中,这是我要在帮助程序中导入的类

#project.py

class MyAPIOne():
...

class MyAPITwo():
...

#helper.py

import MyAPIOne

if __name__ == "__main__":
  api = MyApiOne()
  ...

python3 helper.py一起运行时:

如果我保留绝对导入import MyAPIOne,我将收到ModuleNotFoundError: No module named 'MyAPIOne'

如果我将其更改为相对导入from . import MyAPIOne,则会收到ImportError: cannot import name 'MyAPIOne'

我还尝试过将所有目录附加到sys.path上,但是没有运气。

2 个答案:

答案 0 :(得分:0)

如果您正在project文件夹中运行此脚本,则可以通过以下方式更改导入:from project import MyAPIOne。 另外,您可以将此文件夹添加到您的PYTHONPATH env变量中。

更新:要向PYTHONPATH添加一些文件夹,您可以运行

export PYTHONPATH="${PYTHONPATH}:/my/other/path"

答案 1 :(得分:-1)

主文件可以导入所有文件,但是其他文件不能导入主文件。

一旦用 __ name__ =“ __main __” 提及的文件,便成为主文件。因此helper.py充当主文件。它无法导入。