python中的绝对导入不起作用,相对导入工作

时间:2017-08-01 21:46:24

标签: python python-2.7 python-import importerror

我似乎无法在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都没有帮助

提前感谢任何见解!

1 个答案:

答案 0 :(得分:6)

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

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

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