【发布时间】:2021-07-18 21:31:41
【问题描述】:
我花了很多时间尝试有关堆栈溢出的不同答案,以至于我不再知道使用相对导入的正确方法到底是什么。请记住,此导入应在 localhost 和服务器上工作
尝试将 main.py 中的 Authenticate 类导入 ImportError:尝试在没有已知父包的情况下进行相对导入
请给出解释或在同一目录中导入工作示例的链接。
【问题讨论】:
我花了很多时间尝试有关堆栈溢出的不同答案,以至于我不再知道使用相对导入的正确方法到底是什么。请记住,此导入应在 localhost 和服务器上工作
尝试将 main.py 中的 Authenticate 类导入 ImportError:尝试在没有已知父包的情况下进行相对导入
请给出解释或在同一目录中导入工作示例的链接。
【问题讨论】:
您正在尝试导入 Jupyter Notebook,而不是 class。这就是您获得ImportError 的原因。
看看这个:ipynb import another ipynb file
如果您不想从 Jupyter Notebook 导入,而是从指定 路径 中的模块导入,您可以试试这个:
import importlib.util
spec = importlib.util.spec_from_file_location("module.name", "/path/to/file.py")
foo = importlib.util.module_from_spec(spec)
spec.loader.exec_module(foo)
foo.MyClass()
你也可以使用相对导入:
from foo import bar
另一种选择是添加sys.path 的路径(通过使用导入)以简化从单个包中导入多个模块时的操作:
import sys
# my_package dir contains mod_one.py, mod_two.py and mod_three.py
sys.path.append('/foo/bar/my_package')
from mod_one import foo
from mod_two import bar
from mod_three import foobar
【讨论】: