导入 tqdm 会禁用使用 termcolor 的文本格式

importing tqdm disables text formatting using termcolor

我认为我的问题与 this issue

相似

我正在使用 termcolor 来格式化终端文本。 termcolor 基本上只是将您的字符串包装在终端随后解释的 ANSI 代码中。片段

from termcolor import cprint

cprint('Hello, World!', 'green', attrs=['bold'])

工作正常,但导入 tqdm 会导致白色文本:

from tqdm import tqdm
from termcolor import cprint
cprint('Hello, World!', 'green', attrs=['bold'])

ANSI 代码仍然存在,但终端不再解析它们。

不幸的是,

tqdm 在我的包中根深蒂固,所以我不能只是摆脱导入。程序包对改变行为的终端做了什么,我如何在需要时禁用它?

使用 python 3.5,tqdm 4.15,PyCharm 2017.2.3 Windows 10

问题不在于 tqdm,而在于内部使用的 colorama。在 Windows / PhCharm 上,colorama.init() 方法存在已知问题(参见 https://youtrack.jetbrains.com/issue/PY-16927, https://github.com/tartley/colorama/issues/79

幸运的是,只要您使用 .init(strip=False) 一切正常,colorama 人员提供了一种方便的 .deinit() 方法来反转 tqdm 在导入时使用的任何内容.以下作品:

from tqdm import tqdm
import colorama
from termcolor import cprint

colorama.deinit()
colorama.init(strip=False)
cprint('Hello, World!', 'green', attrs=['bold'])