【问题标题】:py2exe exe closes immediately after launchpy2exe exe 启动后立即关闭
【发布时间】:2015-08-22 08:16:03
【问题描述】:

我有一个 python (2.7) 代码,它有一个 gui (Tkinter) 和另一个模块。我试图将其设为 .exe 文件,但结果很奇怪。以下是两种情况:

  1. 没有名为 py2exe 的模块:我使用 Canopy 64 位来制作 python 脚本。由于是 64 位的,所以我下载了 python 2.7 的 64 位版本的 py2exe 并安装。在安装过程中,py2exe 安装程序会自动查看我的树冠路径,并在安装后检查我是否有 py2exe 模块。我检查并看到 py2exe 文件夹和模块位于 Canopy/Libs 中。所以看起来它已正确安装,但是当我转到 cmd 时,更改目录,然后 python myscript.py py2exe,它显示 no module named py2exe。如果我启动 64 位 IDLE 和 import py2exe,它会导入。

  2. 所以我尝试安装 32 位版本的 py2exe。在安装过程中它看到 C:/Python27 所以我在那里安装它,如果我调用 py2exe,64 位 IDLE 无法导入,但 32 位可以。当我执行python myscript.py py2exe 时,使用 32 位版本的 py2exe,它将我的脚本编译为 .exe 文件。但是,当我双击 .exe 文件时,一个 cmd 窗口会在启动后立即打开和关闭。

我在这里检查了其他类似的主题,但没有一个对我有帮助,因为奇怪的是 64 位安装没有提供名为 py2exe 的模块。任何帮助将不胜感激,在此先感谢。

注意:我的系统变量路径中有 C:/Python27,我的用户变量路径中有 Canopy 的路径。

对案例 1 的更新:当我从那里启动 canopy 命令提示符和 cd,然后按照典型步骤操作时,py2exe 开始运行但卡在:MSVCP90.dll: No such file or directory 并退出

更新:原来是关于我的进口。仅当我导入 matplotlib 时才会出现问题。导入 Tkinter、xlrd 和 numpy 后,它可以正常工作,但是当我导入 matplotlib 时,它给了我关于 msvcp90.dll 的错误。如果我从我的 gui 中删除所有 matplotlib 导入,它会编译,但是当我尝试启动 .exe 时,它​​会启动一个 cmd 窗口,然后立即关闭。

【问题讨论】:

  • 可能与No module named py2exe有关。看到了,告诉我们你的 py2exe 包是什么版本的?
  • 午饭后我也会这样做。
  • 首先尝试通过cmd控制台运行.exe文件,而不是双击。这样 cmd 窗口就不会消失,您将能够看到它抛出了什么错误,然后发布。届时我们将能够为您提供更好的帮助。

标签: python python-2.7 tkinter py2exe canopy


【解决方案1】:

AFAIK,py2exe 留下了一些 DLL。它们应该手动复制到您的 dist 目录中。我建议通过 Dependency Walker 运行您的编译,以找出缺少的 Dll。

http://www.dependencywalker.com/

5.2. Python 2.6、2.7、3.0、3.1

对于 Python 2.6,您需要的 DLL 称为 MSVCR90.dll。 Py2exe 不是 能够自动将此 DLL 包含在您的 dist 目录中,因此您 必须自己提供。

更复杂的是,这个 DLL 的版本不止一个 存在,每个都有相同的文件名。你需要相同的版本 Python解释器是用它编译的,它是版本 9.0.21022.8。通过这些说明的其余部分,将鼠标悬停在 dll 文件(或 vcredist_x86.exe 安装程序可执行文件)上 确认您拥有的版本。您将需要 vcredist_x86.exe 包含 Microsoft Visual C++ 2008 Redistributable Package 2007 年 11 月 29 日发布,所以不是 VS2008 SP1 之一(用 Python 测试 2.7.1)。

http://www.py2exe.org/index.cgi/Tutorial

【讨论】:

  • 我下载并安装了该版本的 vcredist_x86.exe,py2exe 教程告诉我设置一些选项,以便 py2exe 可以分发这些 dll。它告诉我添加的数据文件选项看起来像 data_files = [("Microsoft.VC90.CRT", glob(r'C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\x86\Microsoft.VC90.CRT* .*'))],并且我在 Program Files 下没有这样的目录。我有 Visual Studio 8 目录,但没有 9.0。我完全被困住了。感谢您的回答,如果您有任何进一步的帮助,我将不胜感激。
  • 很抱歉重复发布,但 py2exe 说如果我有权重新分发这些 dll,我应该在我的 Visual Studio 文件夹中拥有这些 dll 的副本。我在 microsoft visual studio 8 下的程序文件(x86)中有一个 VC 文件夹,但即使我安装了 vcredist_x86,它也没有这些 dll 的副本
【解决方案2】:

尝试使用下面的“setup.py”代码。您排除了导致错误的 dll 文件,并且您还必须导入 sip 模块。

从 distutils.core 导入设置 导入py2exe

setup(console=['hello.py'],
    options = {
            "py2exe": {
                "dll_excludes": ["MSVCP90.dll"], 
                "includes":["sip"]
            }
        },
)

要查看问题所在,请从终端运行您的 exe 文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-21
    • 2015-07-16
    • 2020-08-22
    相关资源
    最近更新 更多