如何解决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
和_sub_pkg
),以指示这些名称仅供内部使用。 - 我可以通过将
myfun
添加到from ._wrapper import myfun
来直接从包中访问__init__.py
- 但是我无法从
wrapper
的属性中完全删除模块sub-pkg
或子包pkg
,并试图将sub-pkg
排除在{{ 1}}文件与setup.py
导致setuptools.setup(packages=setuptools.find_packages(exclude=['*.sub_pkg']))
中的导入中断
所以我想我的问题是,有没有办法做这样的事情?在类似情况下的最佳做法是什么?如果不在wrapper.py
和__init__.py
中,那么结构可能有所不同吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。