在我自己创建的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__.py
或其他方面做些不同的事情,以便Python将foo.MyCppClass
视为规范名称吗?
我正在使用Python 2.7;如果解决方案也适用于2.6,那将会很棒。
答案 0 :(得分:2)
我遇到了同样的问题。您可以在Boost.Python定义中更改模块名称:
BOOST_PYTHON_MODULE(_foo)
{
scope().attr("__name__") = "foo";
...
}
帮助问题是一个单独的问题。我认为您需要将每个项目添加到__all__
以将其导出为帮助。
当我同时执行这两项操作时,foo.MyCppClass
的名称就是 - foo.MyCppClass
- help(foo)
提供了MyCppClass
的文档。
答案 1 :(得分:1)
您可以通过添加行
来解决help()
问题
__all__ = ['MyCppClass']
到您的__init__.py
文件。