Python:如何导入一个与子包同名的模块?

3

我还没有遇到过这个问题,但我很好奇如何导入一个与子包同名的模块。例如,可能的模块结构如下:

mymodule\
    __init__.py
    string.py

现在,如果我需要同时从与同一目录中的包(例如__init__.py)中获取mymodule.string子包和每个Python发行版提供的string模块,该怎么办?以下代码行全部导入子包。
from   .                import string
import mymodule.string  as string
import string
2个回答

4
在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

你不必将它作为顶级导入。

只需 import mymodule.stringfoo = mymodule.string.baz(),等等。

如果你真的想使用子包作为 string,你可以将其作为 string import,但首先要做一些像 import string as builtinstring 的事情。


我认为那不会起作用。builtinstring 最终会变成 mymodule.string。 - capybaralet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接