Абсолютный сбой импорта в подпакете, который скрывает имя пакета stdlib

По сути, у меня есть подпакет с тем же именем, что и у стандартного библиотечного пакета («logging»), и я бы хотел, чтобы он имел возможность абсолютного импорта стандартного пакета независимо от того, как я его запускаю, но это не удается, когда я в родительский пакет.

Это действительно похоже на ошибку или недокументированное поведение новой поддержки «абсолютного импорта» (нова в Python 2.5). Пробовал с 2.5 и 2.6.

Макет упаковки:

foo/
    __init__.py
    logging/
        __init__.py

Вfoo/__init__.py мы импортируем наш собственный подпакет регистрации:

from __future__ import absolute_import
from . import logging as rel_logging
print 'top, relative:', rel_logging

Вfoo/logging/__init__.py мы хотим импортировать stdliblogging пакет:

from __future__ import absolute_import
print 'sub, name:', __name__

import logging as abs_logging
print 'sub, absolute:', abs_logging

Примечание: Папка, содержащаяfoo находится в sys.path.

При импорте снаружи / сверхуfoo, результат, как и ожидалось:

c:\> python -c "import foo"
sub, name: foo.logging
sub, absolute: <module 'logging' from 'c:\python26\lib\logging\__init__.pyc'>
top, relative: <module 'foo.logging' from 'foo\logging\__init__.pyc'>

Таким образом, абсолютный импорт в подпакете находит пакет stdlib по желанию.

Но когда мы внутриfoo папка ведет себя по-разному:

c:\foo>\python25\python -c "import foo"
sub, name: foo.logging
sub, name: logging
sub, absolute: <module 'logging' from 'logging\__init__.pyc'>
sub, absolute: <module 'logging' from 'logging\__init__.pyc'>
top, relative: <module 'foo.logging' from 'c:\foo\logging\__init__.pyc'>

Двойной вывод для «sub, name» показывает, что мой собственный подпакет под названием «logging» импортирует себя второй раз и не находит пакет stdlib «logging»даже если "absolute_import" включен.

В этом случае я хотел бы иметь возможность работать с этим пакетом, тестировать его и т. Д. Независимо от текущего каталога. Изменение имени с «регистрации» на что-то другое было бы обходным путем, но не желательным, и в любом случае это поведение не соответствует описанию того, как должен работать абсолютный импорт.

Есть идеи, что происходит, является ли это ошибкой (моей или Python), или это поведение фактически подразумевается в какой-то документации?

Редактировать: ответ от gahooa ясно показывает, в чем проблема. Грубый обходной путь, который доказывает, что это показано здесь:

c:\foo>python -c "import sys; del sys.path[0]; import foo"
sub, name: foo.logging
sub, absolute: <module 'logging' from 'c:\python26\lib\logging\__init__.pyc'>
top, relative: <module 'foo.logging' from 'c:\foo\logging\__init__.pyc'>

Ответы на вопрос(1)

Ваш ответ на вопрос