Python 当我 运行 通过 __main__.py 打包时,记录器不工作

Python logger not working when I run package through __main__.py

我有一个 python 包用于数据预处理,我通常 运行 通过 Makefile。我想 运行 像这样:python3 -m utils.features,所以这就是我创建 __main__.py 的原因。但是,如果我 运行 像这样(而不是 python3 -m utils.features.build_features),所有记录器都会停止生成输出,这些输出都定义在这个文件中,并且来自 build_features.py 中导入的其他模块。为什么会这样?

我的项目结构:

utils/
├─ features/
│  ├─ __init__.py
│  ├─ __main__.py
│  ├─ build_features.py

__init__.py:


__main__.py:

from .build_features import build_features

build_features()

build_features.py:

imports...

def build_features():
    logger = logging.getLogger(__name__)
    logger.info("Reading data")
    ...

    logger.info("Building features")
    ...

    logger.info("Saving data")
    ...


if __name__ == "__main__":
    log_fmt = "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
    logging.basicConfig(level=logging.INFO, format=log_fmt)

    # find .env automagically by walking up directories until it's found, then
    # load up the .env entries as environment variables
    load_dotenv(find_dotenv())

    build_features()

那是因为您在 build_features.pyif __name__ == "__main__" 中设置了记录器。

将记录器设置移动到 __main__.py,它将起作用。