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 (将#修改为@)