rsj0315 发表于 2020-9-1 11:25:13

tkinter 打包问题求助

win10
python3.7
一个py文件
期间有引用到pandas,matplotlib,seaborn第三方库
用pyinstaller打包exe
命令是 pyinstaller ui_test1.py -D -w ,打包出来的ui双击显示如附件图片。

显示执行失败。
这回事哪里出错了呢?还需要检查哪里呢?按照本论坛的帖子已经查看,装python的时候add path了。
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import tkinter as tk
df = pd.read_excel(r'1.xlsx',index_col='年')
# print(df.info())

sns.lineplot(data=df,
             markers=True)
def show():
    plt.show()
win = tk.Tk()
win.geometry('400x600+20+20')
b1= tk.Button(win,text='显示图片',command=show).pack()
win.mainloop()


ui代码:
数据见附件图片

疾风怪盗 发表于 2020-9-1 12:00:24

pyinstaller打包很坑的,会遇到很多问题
有错误的话,打包时不要去除控制台,在地址栏输入cmd,再运行exe,这样可以看到控制台内的报错,不会一闪而过

然后就发现缺了个模块,缺啥补啥,代码里加入import scipy.special.cython_special,再打包就好了
至于原因,说不清楚。。。。。。。。。。。。。。。。。{:5_99:}

疾风怪盗 发表于 2020-9-1 12:02:39

还有好像还提示字体问题,但是能正常显示,不影响运行

1q23w31 发表于 2020-9-1 12:04:59

打包的时候没有引入第三方包的路径{:9_219:}

疾风怪盗 发表于 2020-9-1 12:11:20

1q23w31 发表于 2020-9-1 12:04
打包的时候没有引入第三方包的路径

但是代码里也没用到scipy的内容,scipy说是依赖于numpy,也没用到numpy
为什么打包时需要scipy呢
而且只import scipy也不行,一定要import scipy.special.cython_special才行
是什么原因?

rsj0315 发表于 2020-9-1 12:37:34

本帖最后由 rsj0315 于 2020-9-1 12:39 编辑

疾风怪盗 发表于 2020-9-1 12:00
pyinstaller打包很坑的,会遇到很多问题
有错误的话,打包时不要去除控制台,在地址栏输入cmd,再运行exe ...

拖到cmd中报错是这样的,跟你说的还不一样。

刚才又做了个别的测试。
第一次,只是在ui中加了个按钮,没有用到第三方库。打包成功。
第二次测试,在第一次测试基础上 import matplotlib.pyplot一下,就显示执行不成功了。

图片时,求助问题的代码保留控制台后的报错。
检查过matplotlib的版本了,没问题

用到第三方库的时候,我是从项目的venv下边的lib里的对应的文件夹复制出来,和被打包的.py文件放到一个文件夹里边去了。

疾风怪盗 发表于 2020-9-1 12:45:42

rsj0315 发表于 2020-9-1 12:37
拖到cmd中报错是这样的,跟你说的还不一样。

刚才又做了个别的测试。


我就是用的你的代码,已经打包成功了,你要么加我QQ381671811,传给你看看

你的matplotlib版本是多少?我的是3.2.2

rsj0315 发表于 2020-9-1 13:57:00

C:\Users\renro001>"C:\Users\renro001\Desktop\New folder\dist\ui_test1\ui_test1.exe"
c:\users\renro001\appdata\local\programs\python\python37\lib\site-packages\PyInstaller\loader\pyimod03_importers.py:493: MatplotlibDeprecationWarning: Matplotlib installs where the data is not in the mpl-data subdirectory of the package are deprecated since 3.2 and support for them will be removed two minor releases later.
exec(bytecode, module.__dict__)
Traceback (most recent call last):
File "ui_test1.py", line 2, in <module>
File "<frozen importlib._bootstrap>", line 983, in _find_and_load
File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
File "c:\users\renro001\appdata\local\programs\python\python37\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 493, in exec_module
    exec(bytecode, module.__dict__)
File "matplotlib\__init__.py", line 898, in <module>
File "matplotlib\cbook\__init__.py", line 480, in _get_data_path
File "matplotlib\__init__.py", line 239, in wrapper
File "matplotlib\__init__.py", line 534, in get_data_path
File "matplotlib\__init__.py", line 239, in wrapper
File "matplotlib\__init__.py", line 563, in _get_data_path
NameError: name 'defaultParams' is not defined
Failed to execute script ui_test1
在源码中加入了显示中文和特殊字符的语句,依然报错如上。

疾风怪盗 发表于 2020-9-1 14:16:25

rsj0315 发表于 2020-9-1 13:57
C:%users\renro001>"C:%users\renro001\Desktop\New folder\dist%ui_test1%ui_test1.exe"
c:%users\renro0 ...

那就不知道了。。。。。。。。。。。{:5_99:}

还有一个办法就是,全部卸载干净,只安装一个版本python,配置环境,只安装需要的库,再打包

之前刚开始打包一直莫名其妙出错,全部卸载删除,再安装一次,到现在,打包都还算正常

rsj0315 发表于 2020-9-1 14:23:40

疾风怪盗 发表于 2020-9-1 14:16
那就不知道了。。。。。。。。。。。

还有一个办法就是,全部卸载干净,只安装一个版本python ...

刚才一直在百度,换了必应后,发现有一个github上一样的报错
https://github.com/pyinstaller/pyinstaller/issues/5004

谁英语好可以去看看

rsj0315 发表于 2020-9-1 22:29:53

今天把问题汇总一下:
1.tkinter做的gui,引用matplotlib的时候,需要matplotlib的版本为3.2.2.
这个是从github上找到的答案,最开始用的是最新的3.3.1,这个版本是不行的

2.后来运行py文件遇到了一个问题报警,但py文件可以运行出来,图像也可以显示。报警如下:
Setting Matplotlib MPLCONFIGDIR: consider setting MPLCONFIGDIR to a writable directory for matplotlib configuration data,
解决办法是:
import tempfile
os.environ['MPLCONFIGDIR']=tempfile.mkdtemp()
大概意思是我的 电脑上少一个缓存的地方,我看有人推荐上边的这种临时文件夹,就加在了源码的py文件中了。
3.后来打包好,闪退,报错是no module named ‘scipy.special.cython_special'
解决办法是:
从Lib>site-packages>scipy>special这个文件夹里边copy一个叫cython_special.cp37-win_amd64.pyd的放到打包文件的目录内。
上边几个问题都处理好后,pyinstaller -w -i xx.ico test.py 就成功了。

感谢疾风怪盗期间的帮助!!!!

疾风怪盗 发表于 2020-9-1 22:47:14

rsj0315 发表于 2020-9-1 22:29
今天把问题汇总一下:
1.tkinter做的gui,引用matplotlib的时候,需要matplotlib的版本为3.2.2.
这个是从 ...

不客气
你说的第一个问题,新版本就是会出现问题
第二个问题没遇到过
第三个问题就是我在2楼说的,其实代码里import一下,也就可以直接打包到了

后来那个NameError: name 'defaultParams' is not defined这个是怎么解决的?

rsj0315 发表于 2020-9-1 23:46:40

疾风怪盗 发表于 2020-9-1 22:47
不客气
你说的第一个问题,新版本就是会出现问题
第二个问题没遇到过


后来那个NameError: name 'defaultParams' is not defined这个是怎么解决的?

这个问题归根结底就是matplotlib的版本问题。
把他降成3.2.2,把pyinstaller也降成3.6了,就不报这个错误了。

疾风怪盗 发表于 2020-9-1 23:55:17

rsj0315 发表于 2020-9-1 23:46
后来那个NameError: name 'defaultParams' is not defined这个是怎么解决的?

这个问题归根结底就是ma ...

好吧,还是版本问题
页: [1]
查看完整版本: tkinter 打包问题求助