【问题标题】:PyInstaller "failed to execute script" ErrorPyInstaller“未能执行脚本”错误
【发布时间】:2019-07-19 15:31:51
【问题描述】:

我正在尝试使用 PyInstaller 创建一个 exe 文件,但是我无法这样做。该文件已构建并存放在 dist 文件夹中,但是当我尝试运行它时,会弹出错误“无法执行脚本 {name}”。

这是我正在使用的 .spec 文件:

# -*- mode: python ; coding: utf-8 -*-

block_cipher = None


a = Analysis(['simulator.pyw'],
             pathex=['C:\\Simulator'],
             binaries=[],
             datas=[('bin/**/*.kv', './bin/ui'), ('bin/**/*.xml', './bin/ui')],
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=True,
             cipher=block_cipher,
             noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
exe = EXE(pyz,
          a.scripts,
          [],
          exclude_binaries=True,
          name='simulator',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          console=False , icon='bin\\ui\\icon.ico')
coll = COLLECT(exe,
               a.binaries,
               a.zipfiles,
               a.datas,
               strip=False,
               upx=True,
               upx_exclude=[],
               name='simulator')

这是控制台的输出:

LOG

可能是什么问题?

【问题讨论】:

    标签: python python-2.7 compiler-errors exe pyinstaller


    【解决方案1】:

    您可以通过命令提示符启动脚本来检查完整的回溯。

    这可以通过按WIN + R 并写入cmd 然后使用cd command 更改目录直到到达该文件夹,然后使用.\<softwarename>.exe 来运行。

    例如:

    > cd C:\softwares\test
    > pwd
    C:\softwares\test
    > .\test.exe
    

    根据经验,这可能是由ModuleNotFoundError 引起的。如果这是问题所在,您可以将模块名称添加到规范中的 hiddenimports 列表中。

    即:hiddenimports=['pyodbc'],

    【讨论】:

      【解决方案2】:

      所以你正在使用 Kivy,它会记录几个错误:

      picamera - ImportError: No module named picamera
        File "c:\python27\lib\site-packages\kivy\core\__init__.py", line 63, in core_select_lib
          fromlist=[modulename], level=0)
        File "c:\python27\lib\site-packages\kivy\core\camera\camera_picamera.py", line 18, in <module>
          from picamera import PiCamera
      
      gi - ImportError: No module named gi.repository
        File "c:\python27\lib\site-packages\kivy\core\__init__.py", line 63, in core_select_lib
          fromlist=[modulename], level=0)
        File "c:\python27\lib\site-packages\kivy\core\camera\camera_gi.py", line 10, in <module>
          from gi.repository import Gst
      
      opencv - ImportError: No module named cv2
        File "c:\python27\lib\site-packages\kivy\core\__init__.py", line 63, in core_select_lib
          fromlist=[modulename], level=0)
        File "c:\python27\lib\site-packages\kivy\core\camera\camera_opencv.py", line 48, in <module>
          import cv2
      

      您是否在 requirements.txt 文件中声明了 kivy?

      还有

      15333 INFO: Processing pre-safe import module hook   win32com
      Traceback (most recent call last):
        File "<string>", line 2, in <module>
      ImportError: No module named win32com
      15411 INFO: Processing pre-safe import module hook   win32com
      Traceback (most recent call last):
        File "<string>", line 2, in <module>
      ImportError: No module named win32com
      

      表示缺少库(请参阅ImportError: No module named win32com.client)。

      那么,你是如何声明依赖的?我们需要查看您的项目结构。

      【讨论】:

        【解决方案3】:

        问题似乎确实出在 Kivy (https://kivy.org/doc/stable/guide/packaging-windows.html#alternate-installations) 中。我修改了.spec文件,应用构建成功。

        # -*- mode: python ; coding: utf-8 -*-
        
        block_cipher = None
        
        
        a = Analysis(['simulator.pyw'],
                     pathex=['C:\\Python27\\Scripts\\Simulator'],
                     binaries=[],
                     datas=[('./bin/ui/dynamic_classes.kv', './bin/ui/'), ('./bin/ui/main_layout.kv', './bin/ui/'), ('./bin/ui/text.xml', './bin/ui/'), ('./bin/ui/treatment_adaptive.kv', './bin/ui/'), ('./bin/ui/treatment_classic.kv', './bin/ui/'), ('./bin/ui/treatment_user.kv', './bin/ui/'), ('./bin/ui/icon.ico', './bin/ui/')],
                     hiddenimports=[],
                     hookspath=[],
                     runtime_hooks=[],
                     excludes=[],
                     win_no_prefer_redirects=False,
                     win_private_assemblies=True,
                     cipher=block_cipher,
                     noarchive=False)
        pyz = PYZ(a.pure, a.zipped_data,
                     cipher=block_cipher)
        exe = EXE(pyz,
                  a.scripts,
                  [],
                  exclude_binaries=True,
                  name='simulator',
                  debug=False,
                  bootloader_ignore_signals=False,
                  strip=False,
                  upx=True,
                  clean=True,
                  console=False, icon='bin\\ui\\icon.ico')
        coll = COLLECT(exe,
                       a.binaries,
                       a.zipfiles,
                       a.datas,
                       Tree('C:\\Python27\\share\\sdl2\\bin'),
                       Tree('C:\\Python27\\share\\glew\\bin'),
                       strip=False,
                       upx=True,
                       upx_exclude=[],
                       name='simulator')
        
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-04-07
          • 2021-05-30
          • 2021-02-14
          • 2018-08-17
          • 2021-03-21
          • 2020-08-31
          • 1970-01-01
          相关资源
          最近更新 更多