Почему я не могу импортировать из псевдонима модуля?

Я просто наткнулся на это неожиданное поведение в Python (2.7 и 3.x):

>>> import re as regexp
>>> regexp
<module 're' from '.../re.py'>
>>> from regexp import search
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named 'regexp'

Конечноfrom re import search успешно, как это было бы до того, как я создал псевдоним. Но почему я не могу использовать псевдонимregexp, который теперь известный модуль, в качестве источника для импорта имен?

Это создает неприятный сюрприз, когда есть несколько вариантов модуля: скажем, я все еще использую Python 2 и хочу использовать версию Cpickle, cPickle, Если я тогда попытаюсь импортировать имя изpickle, он будет извлечен из простогоpickle модуль (и я не буду замечать, так как он не выдает ошибку!)

>>> import cPickle as pickle
>>> from pickle import dump
>>> import inspect
>>> inspect.getsourcefile(dump)
'.../python2.7/pickle.py'    # Expected cPickle.dump 

К сожалению!

Осматривая я вижу чтоsys.modules включает в себя реальное имя модуля (re или жеcPickle, но не псевдонимregexp или жеpickle, Это объясняеткак второй импорт завершается неудачно, но неЗачем Разрешение имен модулей Python работает таким образом, то есть каковы правила и обоснования для этого.

Замечания: Это было отмечено как дубликатвопрос это не имеет ничего общего с псевдонимами модулей: псевдонимы даже не упоминаются в вопросе (речь идет об импорте подмодулей из пакета) или в верхних ответах. Хотя ответы на этот вопрос дают информацию, относящуюся к этому вопросу, сами вопросы даже не похожи на ИМХО.

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

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