仅提供 python 包中的一部分功能

make available only a subset of functions in python package

我目前正在为 python 创建一个程序包,但我想只允许用户访问此程序包中定义的一组特定功能。假设结构文件如下:

my_package/
    __init__.py
    modules/
        __init__.py
        functions.py

functions.py中,有几个函数如下(这些都是愚蠢的例子):

def myfunction(x):
    return my_subfunction1(x) + my_subfunction2(x)

def my_subfunction1(x):
    return x

def my_subfunction2(x):
    return 2*x

我希望用户能够导入 my_package 并直接访问 myfunction,但不能导入 my_subfunction1my_subfunction2。例如,假设只有 myfunction 对用户有用,而子功能只是中间计算。

import my_package
a=my_package.myfunction(1) #should return 3
b=my_package.my_subfunction1(1) # should returns an error, function does not exist

我可以想出两种方法来解决我的问题,方法是将以下行添加到 my_package/

内的 __init__.py 文件中

1/from modules.functions import myfunction

2/ from modules.functions import *,并用前导下划线重命名子函数以将它们从加星标的导入中排除,即:

_my_subfunction1_my_subfunction2

到目前为止,这两种技巧似乎都很有效。

我的问题是:这是正确的 "pythonic" 方法吗?哪一个更好 ?如果其中 none 个是好的方法,我应该如何重写它?

感谢您的帮助。

我相信你应该看看 __all__ 变量。

在你的情况下,只需设置,在你__init__.py:

__all__ = ['myfunction']