【问题标题】:Fatal Error! calculator (my file name) returned -1 when creating exe with pyinstaller致命错误!使用 pyinstaller 创建 exe 时,计算器(我的文件名)返回 -1
【发布时间】:2016-04-13 18:41:47
【问题描述】:

1.我使用 python 3.4 tkinter 编写了一个计算器,它使用大量 PNG 图像

2.我尝试使用 cx_Freeze 将其转换为 exe,但我想将其设为一个文件而不是文件夹

3. 所以我决定使用 pyinstaller 并开始创建一个名为“calculator.spec”的规范文件 这就是它的样子,我对此很陌生,并且努力寻找一种方法来确保 PNG 正在被使用,或者只是试图让它工作。此外,我所有的 PNG、calculator.py 和 spec 文件都存储在我桌面上一个名为 Calculator 的文件夹中。

这是我的规范文件的样子:

# -*- mode: python -*-

block_cipher = None


a = Analysis(['calculator.py'],
             pathex=['C:\\Users\\Owner\\Desktop\\Calculator'],
             binaries=None,
             datas=None,
             hiddenimports=[],
             hookspath=None,
             runtime_hooks=None,
             excludes=None,
             win_no_prefer_redirects=None,
             win_private_assemblies=None,
             cipher=block_cipher)

a.datas += [('Calculator/+.png', 'C:\\Users\\Owner\\Desktop\\Calculator\\+.png', 'DATA')]
a.datas += [('Calculator/-.png', 'C:\\Users\\Owner\\Desktop\\Calculator\\-.png', 'DATA')]
a.datas += [('Calculator/=.png', 'C:\\Users\\Owner\\Desktop\\Calculator\\=.png', 'DATA')]
a.datas += [('Calculator/0.png', 'C:\\Users\\Owner\\Desktop\\Calculator\\0.png', 'DATA')]
a.datas += [('Calculator/1.png', 'C:\\Users\\Owner\\Desktop\\Calculator\\1.png', 'DATA')]
a.datas += [('Calculator/2.png', 'C:\\Users\\Owner\\Desktop\\Calculator\\2.png', 'DATA')]
a.datas += [('Calculator/3.png', 'C:\\Users\\Owner\\Desktop\\Calculator\\3.png', 'DATA')]
a.datas += [('Calculator/4.png', 'C:\\Users\\Owner\\Desktop\\Calculator\\4.png', 'DATA')]
a.datas += [('Calculator/5.png', 'C:\\Users\\Owner\\Desktop\\Calculator\\5.png', 'DATA')]
a.datas += [('Calculator/6.png', 'C:\\Users\\Owner\\Desktop\\Calculator\\6.png', 'DATA')]
a.datas += [('Calculator/7.png', 'C:\\Users\\Owner\\Desktop\\Calculator\\7.png', 'DATA')]
a.datas += [('Calculator/8.png', 'C:\\Users\\Owner\\Desktop\\Calculator\\8.png', 'DATA')]
a.datas += [('Calculator/9.png', 'C:\\Users\\Owner\\Desktop\\Calculator\\9.png', 'DATA')]
a.datas += [('Calculator/C.png', 'C:\\Users\\Owner\\Desktop\\Calculator\\C.png', 'DATA')]
a.datas += [('Calculator/D.png', 'C:\\Users\\Owner\\Desktop\\Calculator\\D.png', 'DATA')]
a.datas += [('Calculator/Display.png', 'C:\\Users\\Owner\\Desktop\\Calculator\\Display.png', 'DATA')]
a.datas += [('Calculator/Div.png', 'C:\\Users\\Owner\\Desktop\\Calculator\\Div.png', 'DATA')]
a.datas += [('Calculator/Dot.png', 'C:\\Users\\Owner\\Desktop\\Calculator\\Dot.png', 'DATA')]
a.datas += [('Calculator/Error1.png', 'C:\\Users\\Owner\\Desktop\\Calculator\\Error1.png', 'DATA')]
a.datas += [('Calculator/Error2.png', 'C:\\Users\\Owner\\Desktop\\Calculator\\Error2.png', 'DATA')]
a.datas += [('Calculator/Error3.png', 'C:\\Users\\Owner\\Desktop\\Calculator\\Error3.png', 'DATA')]
a.datas += [('Calculator/Error4.png', 'C:\\Users\\Owner\\Desktop\\Calculator\\Error4.png', 'DATA')]
a.datas += [('Calculator/Error5.png', 'C:\\Users\\Owner\\Desktop\\Calculator\\Error5.png', 'DATA')]
a.datas += [('Calculator/Error6.png', 'C:\\Users\\Owner\\Desktop\\Calculator\\Error6.png', 'DATA')]
a.datas += [('Calculator/Exit.png', 'C:\\Users\\Owner\\Desktop\\Calculator\\Exit.png', 'DATA')]
a.datas += [('Calculator/Instructions.png', 'C:\\Users\\Owner\\Desktop\\Calculator\\Instructions.png', 'DATA')]
a.datas += [('Calculator/X.png', 'C:\\Users\\Owner\\Desktop\\Calculator\\X.png', 'DATA')]



pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          name='calculator',
          debug=False,
          strip=None,
          upx=True,
          console=False )

4.我进入 cmd,以管理员身份运行,然后输入以下内容:

cd desktop
cd Calculator
pyinstaller --onefile --windowed calculator.spec
  1. 然后,它会在 Calculator 文件夹中创建两个名为 build 和 dist 的文件夹

  2. build 文件夹包含一堆文件和一个 base_library 和 warncalculator。在 warncalculator 中它说(缺少模块的负载向前跳过):

    缺少名为资源的模块 - 由 posix 导入,

    C:\Users\Owner\Desktop\Calculator\calculator.py 缺少名为 posix 的模块 - 由 os、C:\Users\Owner\Desktop\Calculator\calculator.py 导入 缺少名为 _datetime.doc 的模块 - 由 _datetime、datetime、C:\Users\Owner\Desktop\Calculator\calculator.py 导入 缺少名为 _posixsubprocess 的模块 - 由子进程导入,C:\Users\Owner\Desktop\Calculator\calculator.py 缺少名为 unicodedata.ucd_3_2_0 的模块 - 由 unicodedata、stringprep、encodings.idna、C:\Users\Owner\Desktop\Calculator\calculator.py 导入

加载更多,但由于字数限制无法放入 它们只是大量缺失的模块

  1. 在 dist 文件中,有一个名为计算器的应用程序,当我尝试运行它时,它给了我错误“致命错误!” '计算器返回 -1'

我不知道发生了什么,感谢任何帮助, 谢谢关注

【问题讨论】:

  • 您可能需要下载 pyinstaller 源代码并运行他们的测试。他们报告说他们的 Windows 测试现在正在通过 - ci.appveyor.com/project/matysek/pyinstaller/branch/develop/job/…。测试应该能够提供更多关于错误的信息
  • 另外,你确定使用 pyinstaller 3.0 吗?在此之前没有 py3.x 支持
  • 大家好,我去了 cmd 并运行了给我错误的应用程序,它说它无法打开“display.PNG”,因为没有这样的文件或目录。如何确保我的 PNG 文件被包含在内????

标签: python tkinter exe fatal-error


【解决方案1】:

我不确定这是否有帮助,但我在使用 pyinstaller 时遇到了同样的问题。在我创建了一个应用程序并运行它之后,就像你说的那样,它说“致命错误:程序返回 -1”。结果是 pyinstaller 无法识别我正在使用的某些模块的路径,因为它们不是默认的 python 模块并且存储在不同的文件夹中。为了解决这个问题,我只需在命令行中输入以下内容:

pyinstaller test.py --paths=C:/python35/lib/site-packages

尝试使用上述行(使用您的文件和路径),看看是否有帮助。它对我有用,我希望它对你有用。如果没有,我希望你能找到答案。

【讨论】:

    【解决方案2】:
    1. 问题是它找不到图像,即 png 文件
    2. 给出的错误是“返回致命错误 -1”
    3. 要解决此问题,请打开您的 .py 文件
    4. 无论您在哪里拥有图像,都必须输入完整路径。这是我声明要使用哪个图像的行之一。

    PhotoImage(file='Display.PNG')

    改为这样写:

    PhotoImage(file="C:\\Users\\Owner\\Desktop\\Calculator\\Display.PNG")
    

    它必须包含双 \\ 才能工作

    1. 为您的每一张图片都这样做
    2. 运行它,它会工作的!!
    3. 最后,如果您收到错误“没有这样的文件或目录”,这也可以解决该问题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-13
      • 2016-09-27
      • 2016-01-03
      • 1970-01-01
      • 2022-06-19
      • 1970-01-01
      • 2020-08-07
      • 1970-01-01
      相关资源
      最近更新 更多