用Python包将子包中的类导入主命名空间

3 投票
1 回答
702 浏览
提问于 2025-04-16 20:18

我正在尝试把我的代码整理成一个合适的Python包(还有子包),准备上传到PyPI。现在我有以下这些目录(用于测试):

Py6S/
    __init__.py
    test.py
    Params/
          __init__.py
          AeroModel.py

AeroModel.py文件里面包含:

class AeroModel:
    NO_AEROSOL=0
    CONTINENTAL=1
    MARITIME=2
    URBAN=3
    USER=4
    DESERT=5
    BIOMASS_BURNING=6
    STRATOSPHERIC=7

Py6S的init.py文件里面包含:

__all__ = ["Params"]

Params的init.py文件里面包含:

__all__ = ["AtmosModel", "AeroModel", "AtmosCorr"]

但是,当我执行from Py6S import *时,我能引用Params,但不能引用AtmosModel或AeroModel。

我希望能够输入from Py6S import *,这样就能直接使用AeroModel、AtmosModel、AtmosCorr等,而不需要在它们前面加上模块名。

1 个回答

1

如果Py6S的 __init__.py 文件里有 from Params import * 这行代码:

import Params
__all__ = ["Params"]
from Params import *
__all__ += Params.__all__

那么你需要这样做:

把这些内容添加到Py6S的 __all__ 里面。

撰写回答