2012-02-21 100 views
3

我还没有遇到过这个问题,但我很好奇如何导入与子包名称相同的模块。举例来说,一个可能的模块结构看起来是这样的:Python:如何导入与子包具有相同名称的模块?

mymodule\ 
    __init__.py 
    string.py 

现在,如果我需要mymodule.string分装string模块与从包每个Python分发交付的是在同一个什么目录,例如__init__.py?以下行代码全部导入子包装。

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

回答

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

谢谢,很好的答案。 :) – 2012-02-21 22:19:03

0

您不必将其导入为顶级导入。

只是import mymodule.stringfoo = mymodule.string.baz()

如果你真的想用分装为string,你可以import它作为string,但首先这样做import string as builtinstring

+0

我不认为去上班。 builtinstring最终会成为mymodule.string。 – David 2015-02-25 18:24:03

相关问题