我正在尝试构建python软件包。在阅读了有关模块和软件包的文档和其他教程之后,我仍然对如何限制根软件包的公共接口上公开的模块/软件包(表示用户可以导入并与软件包一起使用的东西)感到困惑。 / p>
例如,我有一个示例项目,其结构如下:
├── README.md
├── main_package
│ ├── __init__.py
│ ├── config.py
│ ├── main.py
│ ├── sub_package_1
│ │ ├── __init__.py
│ │ └── sub1.py
│ └── sub_package_2
│ ├── __init__.py
│ └── sub2.py
├── package.json
└── setup.py
main_package/main.py
from .config import Config
from .sub_package_1 import sub1_func
from .sub_package_2 import sub2_func
def main_func():
print(Config.DUMMY, sub1_func(), sub2_func())
main_package/__init__.py
from .main import main_func
main_package/sub_package_1/sub1.py
def sub1_func():
return 'sub1_func'
main_package/sub_package_1/__init__.py
from .sub1 import sub1_func
main_package/sub_package_2/sub2.py
def sub2_func():
return 'sub2_func'
main_package/sub_package_2/__init__.py
from .sub2 import sub2_func
我想知道是否有一种方法可以选择性地控制将在主程序包的公共接口上导出(可见)的内容。假设在此示例中,我只想从main_func
和子包main_package.main
以及其他任何内容中导出sub_package_1
。我可以这样做吗?
from main_package import main_func # OK
from main_package import config # NO!
from main_package.sub_package_1 import sub1_func # OK
from main_package.sub_package_2 import sub2_func # NO!
看来我做不到。每次构建软件包时,我都可以导入子软件包和根本不需要的config.py
模块。