2011-11-08 11 views
4

私はcythonでいくつかのコードを書いていますが、私はいくつかの"Packages “within” modules"を持っています。 —これは実際にそこに私の質問へのフォローアップであり、構造は同じでなければなりません。問題はこれがcythonだから、私は.so.pyのものではないと扱っています。__init__.so(__init__.pyの代わりに)はサブパッケージをマスクします

import mystuff 

が動作する、という程度に__init__.so作品を持つが、以下のすべてのサブパッケージを隠すように思われます。つまり、

import mystuff.test.test1 

はありません。 ImportError: No module named ...エラーが発生します。

どうすれば対処できますか? .cにコンパイルする前に.pyxに追加する必要があるものはありますか?または、おそらく__init__.soの名前を何かに変更して、何とかそれを__init__.pyにプルすることができます(__init__.pyはまだパッケージを示すために.soと一緒に存在する必要があります)。または、他の何か。


更新:__path__属性.soパッケージに定義されていない...

は[OK]を、私は多分、私はパッケージの__path__属性を操作することによって、これを回避することができると考えていました。興味深いことに、これは.pyパッケージに対して定義されていますが、.soでエラーが発生します。それは解決策ではありませんが、問題の根源かどうかは疑問です。

答えて

2

Cythonコードを__init__.pyとは別のファイルに入れて、普通のpythonにインポートしてください__init__.py私の前回の質問に対する答えを見てください。

+0

私はそれを別のファイルに入れて '__init __。py'からインポートすることを考えましたが、同じことをするためにインポートできる2つのモジュールで私のパッケージを汚染することを心配していました。私は "実際の"モジュールの名前に '.'を置いてそれを止めることを考えましたが、もちろん' __init __。py'からimportするのを止めるでしょう!私は複雑なソリューションを探すのに忙しくなりました。おそらく、単純な解決策が最適です。ありがとうございました。 – tjm

2

おそらく最も簡単な問題は、__init__.soモジュールの名前を_native.soのように変更することです。

from _native import * 

そして、あなたが説明するように、それが動作するはずです:その後、あなたは次の行が含まれます__init__.pyを作成することができます。