【问题标题】:Absolute imports in python not working, relative imports workpython中的绝对导入不起作用,相对导入起作用
【发布时间】:2018-01-08 22:22:16
【问题描述】:

我似乎无法让绝对导入在 python 中工作。这是我的文件结构:

a/
  b/
    __init__.py
  __init__.py
  foo.py

foo.py:

# Including or removing the __future__ import has no effect
from __future__ import absolute_import
from a import b  # just `import b` works fine
print "success!"

我反而得到:

ImportError: No module named a

这里到底发生了什么?我觉得我缺少一些基本的东西。虽然这个例子很简单,但我需要绝对导入才能为实际项目工作,因此仅用相对导入替换导入不是一种选择。我正在使用 python 2.7.13

没有列出here帮助的解决方案

提前感谢您的任何见解!

【问题讨论】:

  • foo.py 是否在 a 目录中?您在图表中将其显示为外部。
  • 我的错,谢谢你的收获
  • 听起来你犯了一个常见的错误,即直接运行包的子模块而不是作为子模块。这里有一个骗子——真的有很多骗子,但我认为至少有一个好人。
  • 你能详细说明一下吗?我仍然对问题所在感到有些困惑。
  • 我不确定,但也许@user2357112 说你应该写下import a.b,因为ba 的子模块

标签: python python-2.7 python-import importerror


【解决方案1】:

由于未显示,我必须假设您正在运行 python a/foo.py,这会将脚本的目录 ('a') 放在 sys.path 的开头,而实际上您希望当前目录位于开头sys.path.

您应该改为运行 python -m a.foo,这将为您的项目结构正确初始化 sys.path 根。

这是我写的a more in-depth writeup,以其他方式解决同样的问题。

【讨论】:

  • 谢谢!这是我正在寻找的解决方案/解释。该链接也非常有用。
猜你喜欢
  • 1970-01-01
  • 2014-10-31
  • 2018-07-10
  • 2015-04-30
  • 2022-06-15
  • 1970-01-01
  • 1970-01-01
  • 2018-01-24
  • 2013-05-14
相关资源
最近更新 更多