想象一下目录结构:
/ a/ __init__.py b.py c.py c.py
File /a/b.py
looks like:
import c should_be_absolute = c
All the other files (including __init__
) are empty.
When running a test script (using python 2.7):
import a.b
print a.b.should_be_absolute
使用空目录中的
PYTHONPATH=/
时(因此没有任何内容添加到当前目录中的PYTHONPATH
中),我得到<module 'a.c' from '/a/c.py'>
其中根据PEP 328和声明
import <> is always absolute
我预计:<module 'c' from '/c.py'>
当我删除
/a/c.py
文件时,输出如预期的那样。我错过了什么?如果这是正确的行为-如何从
c
导入b
模块(而不是a.c
)?更新:
根据python dev mailing list的说法,这似乎是文档中的一个bug。在python27中,导入不是绝对的。
最佳答案
您需要在python 2.7上添加from __future__ import absolute_import
或使用importlib.import_module('c')
它是Python3的默认值。
python中有一个bug:__future__.py
and its documentation claim absolute imports became mandatory in 2.7, but they didn't。
关于python - 在python27中默认情况下导入不应该是绝对的吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11726633/