py2exe exe在启动后立即关闭

时间:2015-06-07 23:10:50

标签: python python-2.7 tkinter py2exe canopy

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

  1. 没有名为py2exe的模块:我使用Canopy 64bit制作python脚本。因为它是64位,我为python 2.7下载了64位版本的py2exe并安装了。在安装过程中,py2exe安装程序会自动查看我的canopy路径,并在安装后检查是否有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窗口会在启动后立即打开并关闭。

  3. 我在这里检查了其他类似的主题,但没有人帮我这个,因为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窗口,该窗口会立即关闭。

2 个答案:

答案 0 :(得分:0)

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可再发行组件包   发表于29-11-2007,所以不是VS2008 SP1(用Python测试过)   2.7.1)。

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

答案 1 :(得分:0)

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

来自distutils.core导入设置 导入py2exe

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

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