【问题标题】:PyInstaller ImportError: No module named 'pyfiglet.fonts'PyInstaller ImportError:没有名为“pyfiglet.fonts”的模块
【发布时间】:2016-05-01 17:59:17
【问题描述】:

我正在尝试使用 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

谷歌搜索此错误返回this thread,但在我看来,该错误是由 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 时,我尝试使用不同的选项,但没有成功。我错过了什么吗?我不知道如何解决这个问题。

【问题讨论】:

  • 您如何使用 PyInstaller 构建您的 exe?能否提供spec文件?
  • 已编辑以提供规范文件。

标签: python-3.x importerror pyinstaller ascii-art figlet


【解决方案1】:

我也遇到了同样的问题,我已经在 exe 中导入了 pyfiglet 文件夹,它对我有用。我将 venv 文件夹作为虚拟环境,但如果您有不同的虚拟环境文件夹名称,那么也要更改文件夹名称,否则只需更改 AppName.py。

pyinstaller --add-data "venv\Lib\site-packages\pyfiglet;./pyfiglet" AppName.py

【讨论】:

    【解决方案2】:

    您在构建 EXE 时似乎没有包含来自 pyfiglet 的字体文件。这是因为在构建要打包的文件集时,PyInstaller 无法解释来自 pyfiglet 内部的 pkg_resources 调用。

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        PyInstaller命令选项中提供系统上Pyfiglet文件夹的路径,会复制将文件放入生成的 dist。

        例如.:

        pyinstaller --add-data "C:/Program 文件/Python35/Lib/site-packages/pyfiglet";./pyfiglet MyApp.py

        或者对于单个 EXE 文件:

        pyinstaller --onefile --add-data "C:/Program 文件/Python35/Lib/site-packages/pyfiglet";./pyfiglet MyApp.py

        假设您的应用名称是“MyApp.py”,您的系统是 Windows,并且 Pyfiglet 库安装在以下路径:C:/Program Files/Python35/Lib/site-packages/pyfiglet

        否则,请更改为正确的值。

        【讨论】:

        • 此语法不正确。 --add-data 参数中的引号过早终止。应该是:pyinstaller --add-data "C:/Program Files/Python35/Lib/site-packages/pyfiglet;./pyfiglet" MyApp.py
        【解决方案5】:

        在开始工作之前尝试以下代码...!

        !pip install pyfiglet
        

        希望它应该工作..!

        【讨论】:

        • 请提供更多详细信息,在什么情况下依赖安装有效,例如依赖版本、python 版本和操作系统(问题依赖于 Windows 10 上的 Python 3.4)。
        【解决方案6】:

        你好,我遇到过这个问题,但问题是 python 3.9 更新你必须选择 python 3.8 作为解释器..

        【讨论】:

          【解决方案7】:

          安装特定版本:

          pip install pyfiglet
          

          升级pyfiglet

          sudo pip3 install --upgrade pyfiglet
          

          在 Window 10 中出现依赖错误 使用代码:easy_install 而不是 pip install

          easy_install pyfiglet

          使用简易安装升级

          sudo easy_install --upgrade  pyfiglet
          

          在 OSX 系统上安装模块: 使用代码:brew install 而不是 pip install

          brew install pyfiglet 
          

          不使用点子:

          sudo apt-get install -y pyfiglet 
          

          在 CentOS7 或 Linux Fedora 上:

          yum -y install pyfiglet 
          

          或者在 Fedora 上试试

          sudo dnf install pyfiglet 
          

          如果 Homebrew 在 macOS 上搞砸了你的路径,则命令:

          python -m pip install pyfiglet 
          

          适用于 Python3 MacOs Homebrew 螺丝

          python3 -m pip install pyfiglet 
          

          从列表 MacO 中验证模块

           pip freeze | grep  pyfiglet
          

          在 Anaconda 上作为你的 python 包管理器执行

          conda install -c anaconda pyfiglet 
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2021-06-10
            • 2012-07-10
            • 2014-01-21
            • 2018-04-03
            • 1970-01-01
            • 1970-01-01
            • 2016-11-07
            相关资源
            最近更新 更多