想象一下目录结构:
/
a/
__init__.py
b.py
c.py
c.py
文件/a/b.py看起来像:
import c should_be_absolute = c
所有其他文件(包括__init__)都是空的.
运行测试脚本时(使用python 2.7):
import a.b
print a.b.should_be_absolute
Run Code Online (Sandbox Code Playgroud)
与PYTHONPATH=/从空目录(所以没有被添加到PYTHONPATH从当前目录)我得到
<module 'a.c' from '/a/c.py'>
Run Code Online (Sandbox Code Playgroud)
根据PEP 328和import <> is always absolute我期望的声明:
<module 'c' from '/c.py'>
Run Code Online (Sandbox Code Playgroud)
删除/a/c.py文件时输出与预期一致.
我错过了什么?如果这是正确的行为 - 如何c从b(而不是a.c)导入模块?
更新:
根据python dev邮件列表,它似乎是文档中的一个错误.python27默认情况下导入不是绝对的.
jfs*_*jfs 26
你需要在Python 2.7上添加from __future__ import absolute_import或使用importlib.import_module('c')
它是Python 3的默认设置.
Python中存在一个错误:__future__.py它的文档声称绝对导入在2.7中是强制性的,但它们没有.