python - pip.main() 重置 python 中的日志设置

标签 python logging pip

看来,如果我在代码中调用 pip.main(),我的日志记录设置就会重置。

工作示例:

import logging
import pip

logger = logging.getLogger()
logger.setLevel(logging.DEBUG)

logging.debug("Test")
# prints 'DEBUG:root:Test'

pip.main(["install", "requests"])
# prints pip output

logging.debug("Test")
# doesn't print anything

有什么办法可以避免这种情况吗?

最佳答案

原来这是一个known issuepip module

这是因为当创建 pip 时,它并不打算导入到其他程序中,因此没有考虑更改根日志记录配置等考虑因素。

项目维护者建议的解决方法是使用 subprocess 模块调用 pip 本身。他们愿意接受拉取请求来解决此问题,但这需要在项目上进行大量工作。

因此我的代码现在看起来像

import logging
import subprocess

logger = logging.getLogger()
logger.setLevel(logging.DEBUG)

logging.debug("Test")
# prints 'DEBUG:root:Test'

process = subprocess.Popen(["pip", "install", "requests"], 
                           shell=False,
                           stdout=subprocess.PIPE,
                           stderr=subprocess.PIPE)
process.wait()
# prints pip output

logging.debug("Test")
# prints 'DEBUG:root:Test'

关于python - pip.main() 重置 python 中的日志设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38754432/

相关文章:

python - 无法安装 Pip 包

java.util.logging 消息模板问题

python - 如何使用pip为python3安装包?现在它总是为 python2 安装

python-2.7 - Python 和请求 |导入错误 : No module named util

python - web2py 和数据库事务

python - 通过匹配值python删除键值对

python - PIL 图像模式 "P"-> "RGBA"

python - 如何格式化日志记录级别的名称

java - SLF4J-Log4J 似乎没有禁用日志记录

python - 每次我尝试安装时 pyaudio 都会出现错误