Python: как импортировать модуль с тем же именем, что и подпакет? - PullRequest
3 голосов
/ 22 февраля 2012

Я еще не сталкивался с этой проблемой, но мне любопытно, как импортировать модуль с тем же именем, что и подпакет. Например, возможная структура модуля может выглядеть так:

mymodule\
    __init__.py
    string.py

А что если мне понадобится подпакет mymodule.string и , модуль string, который поставляется с каждым дистрибутивом Python из пакета, который находится в том же каталоге, например __init__.py? Следующие строки кода all импортируют подпакет.

from   .                import string
import mymodule.string  as string
import string

Ответы [ 2 ]

2 голосов
/ 22 февраля 2012

В Python 2.5 или 2.6 вы можете использовать:

>>> from __future__ import absolute_import

, который говорит Python, что весь импорт, который не является явно относительным, должен рассматриваться как абсолютный.Т.е. после использования этого объявления вы можете получить доступ как к встроенному строковому модулю, так и к собственному строковому модулю, используя:

>>> import string as the_builtin_string_module
>>> from . import string as my_package_string_module

Я считаю, что это становится значением по умолчанию в Python 2.7 (и Python 3.0).

Подробнее см .: http://www.python.org/dev/peps/pep-0328/#rationale-for-absolute-imports

0 голосов
/ 22 февраля 2012

Вам не нужно импортировать его как импорт верхнего уровня.

Просто import mymodule.string, foo = mymodule.string.baz() и т. Д.

Если вы действительно хотите использовать подпакет как string, вы можете import это как string, но сначала сделайте что-то вроде import string as builtinstring

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...