Cx_freeze exe 疑难解答

Posted

技术标签:

【中文标题】Cx_freeze exe 疑难解答【英文标题】:Cx_freeze exe troubleshooting 【发布时间】:2011-02-10 14:12:44 【问题描述】:

我使用 wxpython 和 boa 构造函数编写了一个应用程序。此应用程序将类实例存储在有序字典中(我导入 odict),并最终将数据存储在本地机器上的搁架中。 该应用程序按我的预期运行,所以我想分发它。 以前,我使用过pyinstaller,但了解到此时python 2.6 不完全支持(经过我的验证,因为我的*exe 没有工作)所以我切换到cx_freeze。我新编译的 exe 似乎运行良好,但没有创建搁置文件。查看构建文件夹中的库文件,我没有看到 odict 模块。我确实看到搁置。似乎这是问题所在,但我不知道为什么不自动包含 odict 。运行应用程序时我没有收到任何错误,所以我不确定如何查找问题。任何提示或建议将不胜感激。

在 windows XP 上使用 python 2.6.6、wx python 2.8.11、cx_freeze 4.2.2。

我写了这个例子来尝试确定它是否会写入搁置文件并且在运行 cx_freeze 后它不起作用....

import wx
import sys
import os
import shelve

def create(parent):
    return Frame1(parent)

[wxID_FRAME1, wxID_FRAME1BUTTON1, 
] = [wx.NewId() for _init_ctrls in range(2)]

class Frame1(wx.Frame):
    def _init_ctrls(self, prnt):
        # generated method, don't edit
        wx.Frame.__init__(self, id=wxID_FRAME1, name='', parent=prnt,
              pos=wx.Point(557, 369), size=wx.Size(400, 250),
              style=wx.DEFAULT_FRAME_STYLE, title='Frame1')
        self.SetClientSize(wx.Size(392, 223))

        self.button1 = wx.Button(id=wxID_FRAME1BUTTON1, label='button1',
              name='button1', parent=self, pos=wx.Point(0, 0), size=wx.Size(392,
              223), style=0)
        self.button1.Bind(wx.EVT_BUTTON, self.OnButton1Button,
              id=wxID_FRAME1BUTTON1)

    def __init__(self, parent):
        self._init_ctrls(parent)

    def OnButton1Button(self, event):
        filename='c:\\MakeAShelve.db'
        data=[1,2,3,4]
        database=shelve.open(filename)
        database['data']=data
        database.close()


if __name__ == '__main__':
    app = wx.PySimpleApp()
    frame = create(None)
    frame.Show()

    app.MainLoop()

我运行的设置如下,并作为 python setup.py build 执行

import sys
from cx_Freeze import setup,Executable


includefiles=[]

exe=Executable(
     script="ShelveTesting.py",
     base="Win32Gui",
     )

setup(
     name="TimingDiagram",
     version="0.2",
     description="An Excel Based Timing Diagram Application",
     options='build_exe':'include_files':includefiles,
     executables=[exe]
     )

【问题讨论】:

如果不包括X,你应该得到ImportError: No module names X 您是否从该应用程序中收到任何错误消息?您可能需要包含 dumbdbm 和/或 dbhash 模块以支持搁置。 【参考方案1】:

您总是可以手动包含这样的模块

build_exe_options = 'packages': ['os','sys','shelve'],'include_files':includefiles
options = "build_exe": build_exe_options

注意!! 使用 wxpython 时需要特别注意。 http://wiki.wxpython.org/cx_freeze

【讨论】:

糟糕,刚刚注意到这是 2 年前的问题。

以上是关于Cx_freeze exe 疑难解答的主要内容,如果未能解决你的问题,请参考以下文章

ubuntu无法安装!求高手解答,百分奉献!

MPLAB 编译总是失败,求高手解答。

visual studio打包程序永久获取管理员权限?

Vs2013以管理员身份运行

电脑上的exe我不小心删了怎么搞回去,现在我啥大多数软件都用不了,求人解答一下。

开机windows 找不到ssms.exe问题