python27默认情况下导入不应该是绝对的吗?

kar*_*olx 17 python import

想象一下目录结构:

/
    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 328import <> is always absolute我期望的声明:

<module 'c' from '/c.py'>
Run Code Online (Sandbox Code Playgroud)

删除/a/c.py文件时输出与预期一致.

我错过了什么?如果这是正确的行为 - 如何cb(而不是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中是强制性的,但它们没有.

  • 你是对的!进一步挖掘后,我找到了[python-dev邮件列表]的链接(http://python.6.n6.nabble.com/status-of-absolute-import-w-python-2-7-td1850742.html )确认python27中默认情况下不启用absolute_import功能. (2认同)