免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4672 | 回复: 7
打印 上一主题 下一主题

cx_freeze打包 python32 和tkinter模块 出现错误 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-02-27 19:51 |只看该作者 |倒序浏览
cx_freeze 打包 python32 和tkinter模块 出现错误
报错如下


网上有人说,经调试发现程序运行后一闪而过是因为缺少支持库出错而自动关闭了,要把Tcl8.5和tk8.5两个目录全复制到目标程序的目录中才能正常运行。
可是我拷过去后发现也不能够运行。

论坛徽章:
0
2 [报告]
发表于 2012-02-27 20:01 |只看该作者
现在可以成功运行了
原来不是要复制Tcl8.5和tk8.5两个目录 而是要复制Tcl8.5.dll和tk8.5.dll两个文件。

论坛徽章:
0
3 [报告]
发表于 2012-02-27 20:38 |只看该作者
还需要手工拷贝库文件?那好像也不怎么好用啊,我倒是想做成直接一个exe就全部搞定的那种。
明天试试看
Lib\site-packages\cx_Freeze\samples目录下有例子啊,pyqt,wx,tk都有

论坛徽章:
0
4 [报告]
发表于 2012-02-27 23:27 |只看该作者
回复 3# askandstudy


在网上搜到这样的东西,不过看不懂
cx_Freeze打包python32+tkinter BUG?

#author nathena

用cx_Freeze打包python32 tkinter桌面应用时,copy tcl和tk 库文件经常出现拷贝出错情况,究其原因,发现为tkinter._fix问题,如下代码:

prefix = os.path.join(sys.prefix,"tcl")
if not os.path.exists(prefix):
    # devdir/../tcltk/lib
    prefix = os.path.join(sys.prefix, os.path.pardir, "tcltk", "lib")
    prefix = os.path.abspath(prefix)
# if this does not exist, no further search is needed
if os.path.exists(prefix):
    prefix = convert_path(prefix)
    if "TCL_LIBRARY" not in os.environ:
        for name in os.listdir(prefix):
            if name.startswith("tcl"):
                tcldir = os.path.join(prefix,name)
                if os.path.isdir(tcldir):
                    os.environ["TCL_LIBRARY"] = tcldir

当tcl文件夹中的 tcl8 文件夹创建时间晚于 tcl8.5文件夹,那么cx_Freeze打包时复制的库文件为tcl8文件夹内的内容。

不解的是,为什么NTFS格式下,tcl8文件夹创建的时间都早于 tcl8.5,而fat32下的时间都晚于 tcl8.5 ,导致自动打包复制的文件错误,必须指定cx_Freeze includes

另,打包后的执行文件不能在中文目录下执行?貌似有cx_Freeze的补丁,但不知道怎么使用。

论坛徽章:
0
5 [报告]
发表于 2012-02-28 13:20 |只看该作者
有可能,做个exe的问题还挺麻烦的,版本不同情况还不一样。
我的2.6的打包方面据说就有些限制,真昏

论坛徽章:
0
6 [报告]
发表于 2012-02-28 16:44 |只看该作者
cx_freeeze本身有很多问题,我上次一个一个跟踪,把python里面的lib注释了很多地方才跑通。
我上次是把程序大块大块注释,从最简单的hello world开始打包,再一点点添加,添加一点打包一下,这样就容易知道哪些地方出错了。

论坛徽章:
0
7 [报告]
发表于 2012-02-28 21:38 |只看该作者
回复 6# txw1958


    打包时还得在NTFS下进行,试了在FAT32下问题又一堆

论坛徽章:
0
8 [报告]
发表于 2012-02-28 21:44 |只看该作者
回复 5# askandstudy


    大侠 还有一个问题 在用python32 tkinter做一个简单的button 目的是退出界面
   from tkinter import *
    root = Tk()   
    Button(root, text='Quit', command=root.quit).pack()
    root.mainloop()
    大概就这样简单的代码
   可是在dos或者在idel下运行都会报错或者不能正常运行
      
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP