在我自己创建的 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,那就太好了。
最佳答案
我遇到了同样的问题。您可以在 Boost.Python 定义中更改模块名称:
BOOST_PYTHON_MODULE(_foo)
{
scope().attr("__name__") = "foo";
...
}
帮助问题是一个单独的问题。我认为您需要将每个项目添加到 __all__
以将其导出以提供帮助。
当我执行这两个操作时,foo.MyCppClass
的名称就是 -- foo.MyCppClass
-- 和 help(foo)
为 MyCppClass
提供文档。
关于Python:在当前模块中导入和更改规范名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9436198/