首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PyInstaller ImportError:没有名为“pyfiglet.fonts”的模块

PyInstaller ImportError:没有名为“pyfiglet.fonts”的模块
EN

Stack Overflow用户
提问于 2016-05-02 01:59:17
回答 7查看 10.1K关注 0票数 3

我正在尝试使用PyInstaller为Asciimatics编译一个演示脚本,希望最终能够为我正在开发的一个基于文本的游戏创建一个简单的图形用户界面,它返回以下错误:

代码语言:javascript
复制
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

谷歌这个错误返回了this thread,但在我看来,这个错误是由SublimeFiglet内部的一个错误引起的,并且在两年前就被修复了。

我在Windows10上使用Python3.4.我不得不将setuptools降级到19.2 (我相信这是我不得不降级到的版本),因为我在尝试运行编译后的.exe文件时收到了一个错误,指出包丢失了。

除了运行脚本所需的其他导入之外,我还在test.py中导入了six (因为它是隐藏导入)和pyfiglet模块。导入pyfiglet和我能想到的任何变体都不会改变什么。我可以修改spec文件,为six添加一个隐藏的导入,尽管我看不出这会有什么改变。

以下是Pyinstaller使用的规范文件:

代码语言:javascript
复制
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时,我尝试使用不同的选项,但都没有成功。我是不是遗漏了什么?我不知道该怎么解决这个问题。

EN

回答 7

Stack Overflow用户

发布于 2020-03-20 19:43:42

我也面临着同样的问题,我已经在exe中导入了pyfiglet文件夹,它对我来说是有效的。我使用venv文件夹作为虚拟环境,但如果您有不同的虚拟环境文件夹名,请同时更改文件夹名,否则仅更改AppName.py。

代码语言:javascript
复制
pyinstaller --add-data "venv\Lib\site-packages\pyfiglet;./pyfiglet" AppName.py
票数 4
EN

Stack Overflow用户

发布于 2016-05-04 19:30:18

看起来您正在构建您的可执行文件,而不包括来自pyfiglet的字体文件。这是因为在构建要打包的文件集时,PyInstaller无法解释来自pyfiglet内部的pkg_resources调用。

我自己没有用过它,但看起来你可以通过updating your spec file将字体文件添加到你的包中,以包含所有丢失的文件。但是,您应该注意FAQ,它说明对pkg_resources的支持有限(因此,您可能根本不能打包pyfiglet)。

票数 0
EN

Stack Overflow用户

发布于 2016-10-20 16:58:25

这个问题很老了,但我也遇到了同样的问题,只需将pyfiglet文件夹从PYTHONPATH\Lib\site-packages复制/粘贴到pyinstaller dist文件夹中即可解决。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36970026

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档