python - python3:选择包属性中的功能和模块
问题描述
我正在编写一个我打算在pypi中发布的 python 包。我的目标是,当用户导入包时,该用户只有一个功能可用(即,没有包含模块和其他子包)
为了更清楚,这是我的项目的简化示例
项目结构如下:
main_folder
├── setup.py
├── tests
└── pkg
├── __init__
├── wrapper.py
└── sub_pkg
├── __init__
├── mod_1.py
└── mod_2.py
哪里wrapper.py
有这样的功能myfun
:
from .sub_pkg.mod_1 import specialised_function_1
from .sub_pkg.mod_2 import specialised_function_2
def myfun(args):
if something1:
result = specialised_function_1(args)
if something2:
result = specialised_function_2(args)
return result
我想要的是当用户导入时pkg
,只能myfun
通过pkg.myfun
我试过的
- 我在模块和子包的名称中添加了一个前导下划线(即,新名称是
_wrapper.py
and_sub_pkg
)以表明它们是供内部使用的。 - 我可以通过添加到
myfun
直接从包中访问from ._wrapper import myfun
__init__.py
- 但是我无法从 的属性中完全删除模块
wrapper
或子包,并试图在文件中排除 导致导入中断sub-pkg
pkg
sub-pkg
setup.py
setuptools.setup(packages=setuptools.find_packages(exclude=['*.sub_pkg']))
wrapper.py
所以我想我的问题是,有没有办法做这样的事情?在类似情况下的最佳做法是什么?如果不在__init__.py
and中setup.py
,那么可能有不同的结构?
解决方案
推荐阅读
- javascript - 我怎样才能使这段代码更好(消除 for 循环)
- c# - 使用 Gremlin.net 字节码从图中提取子图会为找不到“tinker:graph”提供错误反序列化器
- java - 使用 Java 解析 json 并打印 key 和 vaules
- java - 选择排序算法混淆
- r - RStudio 不从 Anaconda 启动
- aix - xlc调试信息是什么格式的?
- datetime - 将秒表“hh:mm:ss:ms”转换为存储在数据库中
- c# - 为什么我在通过 Graph API 重置密码时遇到“Authorization_RequestDenied: Insufficient rights to complete the operation”
- javascript - 克隆包含函数的 javascript 对象
- javascript - 传递值的反应钩子问题|| defaultValue 和更新计数器