4

自分で作成したPythonパッケージディレクトリに、次のような__init__.pyファイルがあります。

from _foo import *

同じディレクトリに、上記によってロードされる_foomodule.soがあります。共有ライブラリはC++で実装されています(Boost Pythonを使用)。これは私に言うことができます:

import foo
print foo.MyCppClass

これは機能しますが、癖があります。クラスは完全なパッケージパスによってPythonに認識されているため、次のように出力されます。

foo._foo.MyCppClass

したがってMyCppClass、のエイリアスとして存在しますが、その正規名fooではありません。foo.MyCppClass少し醜いことに加えて、これはhelp()少し不自由になります:help(foo)fooにはモジュールが含まれていると_foo言うでしょう、そしてあなたが言う場合にのみ、あなたはhelp(foo._foo)のドキュメントを手に入れますMyCppClass

__init__.pyPythonがfoo.MyCppClass正規名と見なすようにするために、別の方法で実行できることはありますか?

私はPython2.7を使用しています。ソリューションが2.6でも機能するのであれば素晴らしいと思います。

4

2 に答える 2

2

私も同じ問題を抱えていました。Boost.Python定義でモジュール名を変更できます。

BOOST_PYTHON_MODULE(_foo)
{
  scope().attr("__name__") = "foo";
  ...
}

ヘルプの問題は別の問題です。__all__ヘルプにエクスポートするには、に各アイテムを追加する必要があると思います。

私がこれらの両方を行うとき、の名前foo.MyCppClassはまさにそれです---foo.MyCppClassそしてhelp(foo)のドキュメントを与えますMyCppClass

于 2012-07-28T01:12:04.847 に答える
1

help()行を追加することで問題を解決できます

__all__ = ['MyCppClass']

あなたの__init__.pyファイルに。

于 2012-02-28T14:14:34.783 に答える