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

摘要:
折腾了一天遇到了几个头疼的问题,还好回去前解决掉了第一个:执行cxfreeze打包好的程序遇到tkinter和_tkinter的缺失问题首先确认是不是已经装了TK的工具:yuminstalltk-devel如果已经有了,终端:pythontkinterpython_tkinterprint(tkinter)print(_tkinter)找到这两个包的所在位置,然后复制到cxfreeze打包的目录下

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

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

首先确认是不是已经装了TK的工具:yum install tk-devel

如果已经有了,终端:

python tkinter

python _tkinter

print(tkinter)

print(_tkinter)

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

接下来再次执行,提示:

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

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

有的话

importtkinter

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

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

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

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

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

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

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

解决办法:

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

第三个问题:

使用cx-freeze打包tensorflow遇到的一堆问题(修改包源码前一定要备份)

1、编译没有报错,执行的时候报错:

错误定位:..../site-packages/window.py -> import pandas.core.common as com

module 'pandas' has no attribute 'core'

解决方法:

更改window.py

把所有的import ...as 改成 from ... import ....as

from pandas.core import common as com

python -m compileall__init__.py

重新install问题解决

2、TypeError 路径错误 for (dir_) in _site_packages_dirs

TypeError : startswith first arg must be str or a tuple of str,not NoneType

错误原因,import site as _site这里,如果不使用cx-freeze打包,_site.USER_SITE变量指示的是python安装目录中site-packages的位置。

而当我们用cx-freeze打包,site-packages的位置不再存在,新的包位置是lib,所以执行到这里_site.USER_SITE变量=None

解决方法:

在..../site-packages/tensorflow/__init__.py 文件的700行左右添加:

if_site.USER_SITE==None:

_site.USER_SITE=_os.path.join(_os.path.abspath(.),"lib")

改成当前相对路径下的lib文件夹

python -m compileall__init__.py

重新install

问题解决

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

免责声明:文章转载自《Centos7/RedHat7 下 python3使用cx-freeze打包matplotlib程序遇到的问题和解决办法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇maven是什么?矩阵乘法与矩阵加速下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

mac中怎么安装python3

简单介绍Mac下使用HomeBrew 安装Python 3.*版本并设置为默认值 1、首先查看Mac自带的python,可以看到是2.7.10的版本 2、查看python3的安装包 brew search python3 3、安装python3 1 brew install python3 可以看到python3的实际安装目录是/usr/local/Cel...

Python3.7源码包编译安装

环境: [root@localhost python3]# cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core) [root@localhost python3]# 1、下载Python 方式一: 进入 https://www.python.org/downloads/sourc...

Python3学习笔记27-ConfigParser模块

ConfigParser模块在Python3修改为configparser,这个模块定义了一个ConfigeParser类,该类的作用是让配置文件生效。配置文件的格式和window的ini文件相同,大致如下: 【section】 name = value name:value 用 = 或 : 来赋值 section可以理解为一个模块,比如登录的时候,这个s...

Python3基础9——range()函数

Python3 range() 函数返回的是一个可迭代对象(类型是对象),而不是列表类型, 所以打印的时候不会打印列表 list() 函数是对象迭代器,可以把range()返回的可迭代对象转为一个列表,返回的变量类型为列表。 函数语法:range(start,end,[step]) 参数含义:start:计数从start开始。默认是从0开始。例如range...

QGIS的编译 (Windows)

一、资源 https://github.com/qgis/QGIS https://github.com/qgis/QGIS/blob/master/INSTALL.md 二、编译需求 Following a summary of the required dependencies for building: Required build tools:...

【Python3爬虫】一次破解JS加密数据的记录

一、前言 本文是一次破解某网站 JS 加密数据的记录,网址为: https://www.qimingpian.cn/finosda/event/einvestment 要获取的是本页面上的投资事件信息,首先可以确定的是数据是通过 AJax 来传输的,并非直接写在网页源码中的。 二、步骤 1.抓包 打开开发者工具,刷新页面,选择 XHR 选项,可以找到如下请...