PyInstaller .exe文件无法运行。

9
经过3天努力,我无法将一个Python程序打包成.exe文件。我尝试了py2exe(始终缺少模块)和PyInstaller。
这是比较复杂的部分。我的程序使用了许多额外的安装模块(coopr、pyomo、openpyxl、glpk、cbc、pyutilib、numpy等),这些模块又导入了各种其他的东西,我无法追踪(PyInstaller警告日志列出了676行缺失或可能不需要的模块)。
但是,我已经通过向我的程序添加“缺失”的模块的import语句,得到了一个.exe版本,可以通过双击或命令行运行,而没有打印任何错误信息。
问题在于,程序什么也不做。我有一个包含在构建中的输入文件,我的程序读取它,进行一些(强烈的)计算,然后在同一目录下创建一个.csv输出文件。它作为.py文件可以工作,但我的.exe什么也不做。
所以,如果您能告诉我问题出在哪里,请告诉我。如果不能,我想知道任何有用的步骤或想法去尝试解决问题。目前为止,我已经耗尽了从程序和文档中找到的反馈意见。

4
我很想将此问题标记为“过于宽泛”,因为你没有发布任何代码。但是,我也曾被同样的问题困扰过。我有一个使用PyInstaller编译而没有警告的东西,在我尝试运行它时却什么也没发生。我不知道如何开始调试这个问题。所以我猜这就是你的问题的实质。你该如何调试一个看起来什么都没有做(没有错误信息,也没有期望的行为)的已编译程序。 - Steven Rumbalski
@StevenRumbalski 谢谢你的同情。 - Dylan Cross
我遇到了同样的问题。更让我困扰的是,从控制台运行时没有任何输出。 - Mefitico
5个回答

10

我刚刚为自己解决了这个问题。

确保您没有一个与要转换为可执行文件的脚本同名的文件夹。

如果您已经有应用程序文件 sample.py 以及文件夹 sample(其中包含其他 .py 文件),并且您希望应用程序保留名称 sample,则可以通过将 sample.py 重命名为 sample_app.py 并使用 --name 选项调用 pyinstaller 来解决此问题,例如:pyinstaller --onefile --name sample sample_app.py。由 pyinstaller 创建的二进制文件将被称为 sample


这对我有用,我相信是因为与我的脚本同名的文件夹有__init__.py文件,使其成为一个模块,而pyinstaller正在尝试构建它。无论如何,你是救命恩人,感谢你。 - sjjk001

7
在创建exe文件时,请确保Python脚本包含该代码。
if __name__ == '__main__':
    main()

在底部添加代码,否则Python可执行文件会运行,但由于没有任何内容可以运行,它只会结束。

1
我也无法正确使用pyinstaller,但几年前我找到了一个解决方案,在Windows上生成R脚本可执行文件,因此我尝试使用Python并成功了!以下是解决方案,在CMD中只需3行代码即可:

https://github.com/jorgeavilacartes/making-my-own-executable-python

你可以创建自己的扩展并将其分配给所需的python.exe(如果你有多个虚拟环境,可以为每个环境创建一个可执行扩展)。
不幸的是,我只有Windows的解决方案。
希望能帮到你!
附注:请注意,在创建可执行文件的同一文件夹中不要有任何.ipynb文件,否则它将无法正常运行。我不知道为什么,但这是我遇到的唯一问题。

1

如果您的脚本访问非Python文件,请将可执行文件移动到可以找到它们的位置。

我曾经遇到过同样的问题。对我来说,原因是我的一些Python文件需要访问非Python文件(在我的情况下是gif文件)。PyInstaller没有将资源与Python文件捆绑在一起,并且没有将可执行文件粘贴到与主Python文件相同的目录中,因此当我的程序尝试访问它们时,我会收到错误。解决方案很简单,只需将资源复制到可执行文件正在寻找它们的位置,或者反之亦然。

由于某种原因,帮助我找到问题的错误消息在我正常运行PyInstaller时并没有生成。只有在使用--onefile标志时才会生成它们,即使这样,它们也只会在不到半秒钟的时间内出现,然后提示就关闭了。当消息出现时,我必须使用ctrl+prt来捕获屏幕。


感谢你救了我的一天。必须确保以下两点:1) 代码中的所有路径都像 ./img.png 这样 ,而不是 ./some_dir/img.png 这样 2) 稍后将所有这些文件复制到 dist 文件夹中。 - undefined

1

当在Windows上双击运行exe文件失败时,关联的窗口也会自动关闭。如果发生这种情况,请打开命令提示符并尝试通过进入适当的路径并输入文件名(例如C:\github\program\dist\main.py)在其中运行exe文件。应用程序抛出的任何错误将在命令提示符窗口中打印,而不会自动关闭。


首先,你可能想要执行 main.exe。所以,命令是 start main.exe,它会打开另一个命令行窗口,一旦遇到错误就会自动关闭。在这种情况下,有什么办法可以保持窗口保持打开吗? - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接