如果我在代码中调用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
我有什么想法可以避免这种情况吗?
答案 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()
添加的处理程序不是您想要的,则可能还需要添加处理程序。