2012-04-24 15 views
2

私は、次のディレクトリ構造を持つ単純なPythonのパッケージを持っている:Pythonモジュール、同じパッケージ内の他のモジュールを参照していますか?

wibble 
| 
|-----foo 
|  |----ping.py 
| 
|-----bar 
|  |----pong.py 

簡単な質問:どのように私はpong.pyからping.py内の関数/クラスを参照しますか?ドキュメントを見ると、wibblefoobarのルートに__init__.pyというファイルを作成し、次にfrom wibble.foo.ping import important_functionのようなファイルを作成するのと同じように簡単です。しかし、これを試みるとNo module named wibble.foo.pingになります。

これは可能でなければならないため、私はどこかのドキュメントで何かを逃してしまったと確信しています。私はまた、modulenamespaceの区別に少し曇っています。私の背景はc#.netなので、ここでの類推は役に立ちます。

答えて

2

あなたは、1つの方法は、もう一つの方法は、Windowsでは、環境変数PYTHONPATH

export PYTHONPATH=$PYTHONPATH:/path/to/wibble 
+1

である

import sys sys.path.append('/path/to/wibble') 

です(the official documentationを参照してください)Pythonのパスにwibble追加する必要があるので、それは 'PATHだろう=%PATH%; c:\ path \ to \ wibble'(ちょっと推測するとC#.net参照) – alan

+0

これは* nix上で開発されているはずです。このソリューションに関する私の懸念は、パッケージの絶対的な位置をコードベース/インフラストラクチャに結びつけることです。これらのファイルが互いに対して相対的に容易に見つかることを考えれば、なぜ 'pong'が' wibble'パッケージに入っているのかを知ることができません。 – growse

+0

pong.pyファイルの場所をdinamicly推測して、pythonパスにwibbleフォルダを追加することはできますが、確かに悪い習慣です – diegueus9

関連する問題