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.py
的 if __name__ == "__main__"
中设置了记录器。
将记录器设置移动到 __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.py
的 if __name__ == "__main__"
中设置了记录器。
将记录器设置移动到 __main__.py
,它将起作用。