pip.main()在python中重置日志记录设置

时间:2016-08-03 22:06:32

标签: 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

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

2 个答案:

答案 0 :(得分:2)

事实证明,这是known issue中的pip 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'

答案 1 :(得分:0)

install的{​​{1}}命令会覆盖日志记录配置。您需要自己重置配置,例如通过做

pip
logger.setLevel(logging.DEBUG) 电话后再次

。请注意,如果pip.main()添加的处理程序不是您想要的,则可能还需要添加处理程序。