2011-01-27 12 views
9

私はディレクトリにいくつかのpythonモジュールを持っています。パッケージ内のモジュールと名前が衝突するモジュールをインポートするにはどうすればよいですか?

同じディレクトリに、私はパッケージtestsを持っています。

testsのモジュール名は、テストが含まれているモジュールと同じですが、もちろん重要ではありません。

したがって、tests.fooでは、import fooと書いています。これはあまりうまくいきません。をインポートしますが、トップレベルのfooはインポートしません。

テストモジュールを呼び出す必要がありますか?

申し訳ありませんわかりやすい場合、私のsearch-fuは失敗しました。このような

答えて

7

test_foo.pyはのように思えますこの場合には適切な解決策です。

あなたはPythonのパッケージにtestsディレクトリを作る(tests/__init__.pyファイルを追加)とabsolute importsを使用し、テストモジュールの名前を変更しない場合は、次の

from __future__ import absolute_import 
import foo     # import global foo.py, the first foo.py in sys.path 
import tests.foo as test_foo # import tests/foo.py 
3

使用の完全なパッケージパス:

--Package 
    |-- __init__.py 
    |-- foo.py 
    | 
    |-- tests 
    | | -- __init__.py 
     | -- foo.py 

tests/foo.py

from Package import foo 

ないと私は、ドキュメントのこの部分は、あなたが興味ができると思う:http://docs.python.org/whatsnew/2.5.html#pep-328-absolute-and-relative-imports

+0

おかげで、しかし「とValueError:トップレベルのパッケージを越えしようと相対インポートを」。これはPython 2.6です。あなたはおそらく、最初はすべてをトップレベルのパッケージに入れておくべきだったでしょう。今の変化が痛みを伴わないかどうかは不明です。 –

+0

@Steve Jessop:申し訳ありません、私は 'foo'モジュールをインポートするために完全なパッケージパスを使用することを意味しました。私はそれを編集します。 – mouad

関連する問題