2012-02-21 127 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

相關問題