2012-02-21 30 views
3

私はまだこの問題に遭遇していませんが、サブパッケージと同じ名前のモジュールをインポートする方法が不思議です。例えば、可能なモジュール構造は、次のようになります。Python:サブパッケージと同じ名前のモジュールをインポートするには?

mymodule\ 
    __init__.py 
    string.py 

さて、何と同じ範囲内にあるパッケージからすべてのPythonディストリビューションに同梱されて、私はmymodule.stringサブパッケージが必要な場合stringモジュールディレクトリ(__init__.pyなど)?次のコード行すべてサブパッケージをインポートします。

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

答えて

2

、あなたのような何かを使用することができます:明示的に相対的ではありません、すべての輸入は絶対として扱われるべきであるというのPythonを告げる

>>> from __future__ import absolute_import 

。すなわち、この宣言を使用した後、あなたが使用して組み込みstringモジュールと、独自の文字列モジュールの両方にアクセスできます。

>>> 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.stringfoo = mymodule.string.baz()など

あなたが本当にstringとしてサブパッケージを使用したい場合は、あなたがimportそれをすることができますstringとしてではなく、最初のPython 2.5または2.6でimport string as builtinstring

+0

が、私はそれが仕事になるだろうとは思いません。 builtinstringはmymodule.stringになります。 – David

関連する問題