码迷,mamicode.com
首页 > 编程语言 > 详细

Centos7/RedHat7 下 python3使用cx-freeze打包matplotlib程序遇到的问题和解决办法

时间:2018-07-31 22:10:02      阅读:229      评论:0      收藏:0      [点我收藏+]

标签:字符   命令   port   没有   linu   虚拟   系统   system   放弃   

折腾了一天遇到了几个头疼的问题,还好回去前解决掉了

第一个:执行cxfreeze打包好的程序遇到 tkinter 和 _tkinter的缺失问题

首先终端:python tkinter

     python _tkinter

     print(tkinter)

     print(_tkinter)

找到这两个包的所在位置,然后复制到cxfreeze打包的目录下

接下来再次执行,提示:

技术分享图片

首先看一下系统有没有安装 tk tcl  。没有的话: yum -y install tkinter tcl-devel tk-devel

有的话 

import tkinter

root = tkinter.Tk()

print(root.tk.exprstring(‘$tcl_library‘))

print(root.tk.exprstring(‘$tk_library‘))

找到 tcl 和 tk 的安装位置 

在setup.py 里面加这样的几句话:

os.environ[‘TCL_LIBRARY‘] = "usr/share/tcl8.5"
os.environ[‘TK_LIBRARY‘] = "usr/share/tk8.5"

os.environ[‘TKPATH‘] = "usr/share/tk8.5"

重新打包 python setup.py install

 

再次运行可执行程序报错:

技术分享图片

这次连错误信息都没有就很难受,折腾了一下午差点放弃,最后偶然发现是路径的问题,打包的文件路径名包含  “文档/” 也就是包含中文字符

试着换了一个纯英文的路径名成功!

 

然后又碰到了更难受的问题,matplotlib程序在linux的终端执行,没有桌面环境,报错:

技术分享图片

解决办法:

import matplotlib.pyplot as plt 后面加一句     plt.switch_backend("agg")
在本地虚拟机上测试,查看并关闭centos7的图形界面:

查看默认的target,执行:
systemctl get-default
开机以命令模式启动,执行:
systemctl set-default multi-user.target
开机以图形界面启动,执行:
systemctl set-default graphical.target

 

问题解决,痛并快乐的一天

Centos7/RedHat7 下 python3使用cx-freeze打包matplotlib程序遇到的问题和解决办法

标签:字符   命令   port   没有   linu   虚拟   系统   system   放弃   

原文地址:https://www.cnblogs.com/dzzy/p/9397571.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!