想象一下目录结构:

/
    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/

10-12 20:08