如何在 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++ 对象的函数?
如何使用 boost/python 向 python 公开 C++ 虚函数?