我有一个非常简单的 Python 程序,它使用“Blessed”。在Win10 Python解释器下运行良好,但与Pyinstaller打包时报错,终端控制代码被忽略。这是代码:
from blessed import Terminal
t = Terminal()
print(t.bright_green('Hello world'))
字符串“Hello world”应该以亮绿色显示在控制台上。Pyinstaller 完成时没有错误,当我运行 .exe 时,我收到以下消息:
terminal.py:222: UserWarning: 无法设置term(kind='vtwin10'): 找不到终端vtwin10
然后以默认终端颜色显示“Hello world”。
看起来 Pyinstaller 没有在构建中包含解释器发现没有问题的东西。我在我的 Anaconda3 安装文件夹中找到了一个 vtwin10.py 文件:
C:\Anaconda3\Lib\site-packages\jinxed\terminfo
我查看了祝福库的 terminal.py 文件中的引用错误。这是代码:
try:
curses.setupterm(self._kind, self._init_descriptor)
except curses.error as err:
warnings.warn('Failed to setupterm(kind={0!r}): {1}'
.format(self._kind, err))
所以看起来 self._kind 被设置为'vtwin10'。在 terminal.py 中有一个条件导入,如下所示:
if platform.system() == 'Windows':
import jinxed as curses # pylint: disable=import-error
HAS_TTY = True
(我明白了。)看起来 jinxed 包正在代码中显式导入,并替换了 curses 包。但不知何故,缺少 vtwin10 定义。
我在 jinxed 中找到了 setupterm() 并深入挖掘以找到该错误消息的来源。它在这段代码中:
try:
self.terminfo = importlib.import_module('jinxed.terminfo.%s' % term.replace('-', '_'))
except ImportError:
raise error('Could not find terminal %s' % term)
这就是我卡住的地方。看起来此代码无法在 jinxed 库中找到 vtwin10.py 文件。有谁知道如何强制 Pyinstaller 包含诅咒的 vtwin10 终端定义?我猜这就是问题所在。
非常感谢。