我正在尝试使用 PyInstaller 编译 Asciimatics 的演示脚本之一,希望最终能够为我正在开发的基于文本的游戏创建一个简单的 GUI,它返回以下错误:
C:\Users\X\Documents\Python Scripts\asciimatics samples\dist\test>test.exe
Traceback (most recent call last):
File "site-packages\setuptools-19.2-py3.4.egg\pkg_resources\__init__.py", line 443, in get_provider
KeyError: 'pyfiglet.fonts'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<string>", line 22, in <module>
File "site-packages\asciimatics\screen.py", line 859, in wrapper
File "<string>", line 12, in demo
File "site-packages\asciimatics\renderers.py", line 276, in __init__
File "site-packages\pyfiglet\__init__.py", line 710, in __init__
File "site-packages\pyfiglet\__init__.py", line 717, in setFont
File "site-packages\pyfiglet\__init__.py", line 90, in __init__
File "site-packages\pyfiglet\__init__.py", line 100, in preloadFont
File "site-packages\setuptools-19.2-py3.4.egg\pkg_resources\__init__.py", line 1160, in resource_exists
File "site-packages\setuptools-19.2-py3.4.egg\pkg_resources\__init__.py", line 445, in get_provider
ImportError: No module named 'pyfiglet.fonts'
test returned -1
谷歌搜索返回此错误这个线程 https://github.com/adamchainz/SublimeFiglet/issues/7,但在我看来,这个错误是由 SublimeFiglet 本身的错误引起的,并且在两年前就被修复了。
我在 Windows 10 上使用 Python 3.4。我必须将 setuptools 降级到 19.2(我相信这是我必须降级到的版本),因为我在尝试运行编译的 .exe 时收到一条错误,指出打包包丢失文件。
除了运行脚本所需的其他导入之外,我还导入了 test.py 中的六个模块(因为它是隐藏导入)和 pyfiglet 模块。导入 pyfiglet 和我能想到的任何变体都不会改变任何东西。我可以更改规范文件以添加六个隐藏导入,尽管我不知道这会如何改变任何东西。
这是 Pyinstaller 使用的规范文件:
block_cipher = None
a = Analysis(['test.py'],
pathex=['C:\\Users\\Sirindil\\Documents\\Python Scripts\\asciimatics samples'],
binaries=None,
datas=None,
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
exclude_binaries=True,
name='test',
debug=False,
strip=False,
upx=True,
console=True )
coll = COLLECT(exe,
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=True,
name='test')
Asciimatics 中包含的每个示例脚本都会为我返回相同的错误。在脚本上运行 pyinstaller 时,我尝试使用不同的选项,但没有成功。我错过了什么吗?我不知道如何解决这个问题。