如何在 Python 模块中公开函数?

Posted

技术标签:

【中文标题】如何在 Python 模块中公开函数?【英文标题】:How do I expose a function in a Python module? 【发布时间】:2016-07-15 06:49:22 【问题描述】:

我编写了一个由单个函数组成的模块。我希望能够像 tqdm 一样使用它:

>>> from tqdm import tqdm
>>> tqdm
<function tqdm.tqdm>

但是我不知道如何以这种方式进行设置。这是我所拥有的:

>>> from missingno import missingno
>>> missingno
<module 'missingno.missingno' from '[...]'>
>>> missingno.missingno
<function missingno.missingno.missingno>

我相信这个问题之前已经被问过无数次了,但我不确定包装是如何工作的,也找不到这个谜题的答案。

这里是存储库:https://github.com/ResidentMario/missingno。

【问题讨论】:

【参考方案1】:

看了pandas-profiling之后,我明白了。将以下行添加到__init__.py()

from .missingno import missingno

【讨论】:

另外,如果你想非常干净,在你的__init__.py文件中添加__all__ = ['missingno']【参考方案2】:

我不完全确定你的问题是什么,但我认为你想要的是:

from missingno.missingno import missingno

您可能需要考虑为包/文件/函数命名不同的东西哈哈。

【讨论】:

我希望它只是 from missingno import missingno,就像 tqdm 一样。问题是他们的存储库似乎通过将模块放在存储库顶部(?)而不是模块级文件夹来实现这一点,但是 pip 和 PyPi 都拒绝这样的文件结构。 您可以编写一个脚本来执行安装到一个单独的位置,并将您的 PYTHONPATH 指向该位置(即,当您安装时创建一个名为“something”的目录并将missingno.py 放在该目录中. 然后将 PYTHONPATH 指向“某物”)。 @ResMar no,tqdm 不会将模块放在 repo 的顶部,而是放在 tqdm 文件夹中。因此这可能会产生误导,因为模块文件夹与顶层文件夹具有相同的名称,但这实际上是一个标准的 Python 模块层次结构。

以上是关于如何在 Python 模块中公开函数?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不复制对象的情况下向 Python 公开返回 C++ 对象的函数?

C.dll 如何向 Python 公开变量?

如何使用 boost/python 向 python 公开 C++ 虚函数?

如何暴露一个不能直接暴露的c++函数,同名

如何使用 Cython 向 Python 公开返回 C++ 对象的函数?

在 boost.python 中;如何公开包含在另一个类中的类(通过组合)?