4

在我自己创建的 Python 包目录中,我有一个__init__.py文件说:

from _foo import *

在同一目录中有一个 _foomodule.so 由上面加载。共享库是用 C++ 实现的(使用 Boost Python)。这让我说:

import foo
print foo.MyCppClass

这可行,但有一个怪癖:Python 通过完整的包路径知道该类,这使得它可以打印:

foo._foo.MyCppClass

因此,虽然MyCppClass作为别名存在foofoo.MyCppClass但不是它的规范名称。除了有点难看之外,这也help()有点蹩脚:help(foo)会说 foo 包含一个 module _foo,只有当你说help(foo._foo)你得到MyCppClass.

有什么我可以做不同的事情__init__.py或以其他方式使它成为 Pythonfoo.MyCppClass的规范名称吗?

我正在使用 Python 2.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 回答