Python:在当前模块中导入和更改规范名称

标签 python import canonical-name

在我自己创建的 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/

相关文章:

python - 如何使用 addItem 将 QPushButton 添加到 PyQtGraph?

python - 在 pandas python 中使用 read_csv(..) 导入时如何处理 .csv 文件中不匹配的引号

javascript - 仅当单击“保存”按钮时才导入 csv(添加了 Plunker)

python - 正则表达式用括号外的逗号分割字符串,并具有多个级别的python

python - Django 如何用数据迁移填充表?

python - 为什么循环导入似乎在调用堆栈中更靠前,但在更靠下的位置引发 ImportError?

java - 主机名与规范主机名

java - 名称和规范名称有什么区别?

python - 使用 HTTPS 提供安全的 Django 页面