我还没有遇到过这个问题,但我很好奇如何导入一个与子包具有相同名称的模块。例如,可能的模块结构可能如下所示:
mymodule\
__init__.py
string.py
现在,如果我需要mymodule.string
子包和,那么与同一目录中的包中的每个Python发行版一起提供的string
模块,如__init__.py
?以下代码行 all 导入子包。
from . import string
import mymodule.string as string
import string
答案 0 :(得分:2)
在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
答案 1 :(得分:0)
您不必将其作为顶级导入导入。
只需import mymodule.string
,foo = mymodule.string.baz()
等
如果你真的想要将子包用作string
,你可以import
将它作为string
,但首先要执行import string as builtinstring