news 2026/5/1 17:02:31

uv安装的cpython使用matplotlib库作图不能显示的问题起因和解决

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
uv安装的cpython使用matplotlib库作图不能显示的问题起因和解决

uv安装的cpython使用matplotlib库作图不能显示,而系统自带的cpython却可以。

aaa@kylin-pc:~/par$ mkdir uv3820 aaa@kylin-pc:~/par$ cd uv3820 aaa@kylin-pc:~/par/uv3820$ uv python install cpython-3.8.20 Installed Python 3.8.20 in 10.85s + cpython-3.8.20-linux-aarch64-gnu (python3.8) aaa@kylin-pc:~/par/uv3820$ uv venv --python cpython-3.8.20 Using CPython 3.8.20 Creating virtual environment at: .venv Activate with: source .venv/bin/activate aaa@kylin-pc:~/par/uv3820$ source .venv/bin/activate (uv3820) aaa@kylin-pc:~/par/uv3820$ uv pip install matplotlib Resolved 13 packages in 2.09s Prepared 9 packages in 1.35s Installed 13 packages in 20ms + contourpy==1.1.1 + cycler==0.12.1 + fonttools==4.57.0 + importlib-resources==6.4.5 + kiwisolver==1.4.7 + matplotlib==3.7.5 + numpy==1.24.4 + packaging==26.0 + pillow==10.4.0 + pyparsing==3.1.4 + python-dateutil==2.9.0.post0 + six==1.17.0 + zipp==3.20.2 (uv3820) aaa@kylin-pc:~/par/uv3820$ python3 Python 3.8.20 (default, Oct 2 2024, 15:14:40) [GCC 6.3.0 20170516] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import matplotlib.pyplot as plt >>> import numpy as np >>> >>> xpoints = np.array([0, 6]) >>> ypoints = np.array([0, 60]) >>> >>> plt.plot(xpoints, ypoints) [<matplotlib.lines.Line2D object at 0x7fa80671c0>] >>> >>> plt.show() <stdin>:1: UserWarning: Matplotlib is currently using agg, which is a non-GUI backend, so cannot show the figure. >>>

把这个cpython包单独下载下来,手工安装,也是一样的。

aaa@kylin-pc:~/par/uv-aarch64-unknown-linux-musl$ ./uv python install cpython-3.8.20 error: Failed to install cpython-3.8.20-linux-aarch64-gnu Caused by: Request failed after 3 retries in 5.6s Caused by: Failed to download https://github.com/astral-sh/python-build-standalone/releases/download/20241002/cpython-3.8.20%2B20241002-aarch64-unknown-linux-gnu-install_only_stripped.tar.gz Caused by: error sending request for url (https://github.com/astral-sh/python-build-standalone/releases/download/20241002/cpython-3.8.20%2B20241002-aarch64-unknown-linux-gnu-install_only_stripped.tar.gz) Caused by: client error (Connect) Caused by: tunnel error: failed to create underlying connection Caused by: dns error Caused by: failed to lookup address information: Name does not resolve aaa@kylin-pc:~/par$ wget -c https://github.com/astral-sh/python-build-standalone/releases/download/20241002/cpython-3.8.20%2B20241002-aarch64-unknown-linux-gnu-install_only_stripped.tar.gz aaa@kylin-pc:~/par$ mkdir tpy3820 aaa@kylin-pc:~/par$ cd tpy3820 aaa@kylin-pc:~/par/tpy3820$ /home/aaa/par/cpython-3.8.20+20241002-aarch64-unknown-linux-gnu-install_only_stripped/python/bin/python3.8 -m venv myenv aaa@kylin-pc:~/par/tpy3820$ source myenv/bin/activate (myenv) aaa@kylin-pc:~/par/tpy3820$ pip list Package Version ---------- ------- pip 23.0.1 setuptools 56.0.0 (myenv) aaa@kylin-pc:~/par/tpy3820$ python3 --version Python 3.8.20 (myenv) aaa@kylin-pc:~/par/tpy3820$ pip install --no-index -f ~/par/arm38 matplotlib Looking in links: /home/aaa/par/arm38 Processing /home/aaa/par/arm38/matplotlib-3.7.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl Processing /home/aaa/par/arm38/pillow-10.4.0-cp38-cp38-manylinux_2_28_aarch64.whl Processing /home/aaa/par/arm38/importlib_resources-6.4.5-py3-none-any.whl Processing /home/aaa/par/arm38/numpy-1.24.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl Processing /home/aaa/par/arm38/kiwisolver-1.4.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl Processing /home/aaa/par/arm38/packaging-26.0-py3-none-any.whl Processing /home/aaa/par/arm38/contourpy-1.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl Processing /home/aaa/par/arm38/pyparsing-3.1.4-py3-none-any.whl Processing /home/aaa/par/arm38/python_dateutil-2.9.0.post0-py2.py3-none-any.whl Processing /home/aaa/par/arm38/fonttools-4.57.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl Processing /home/aaa/par/arm38/cycler-0.12.1-py3-none-any.whl Processing /home/aaa/par/arm38/zipp-3.20.2-py3-none-any.whl Processing /home/aaa/par/arm38/six-1.17.0-py2.py3-none-any.whl Installing collected packages: zipp, six, pyparsing, pillow, packaging, numpy, kiwisolver, fonttools, cycler, python-dateutil, importlib-resources, contourpy, matplotlib Successfully installed contourpy-1.1.1 cycler-0.12.1 fonttools-4.57.0 importlib-resources-6.4.5 kiwisolver-1.4.7 matplotlib-3.7.5 numpy-1.24.4 packaging-26.0 pillow-10.4.0 pyparsing-3.1.4 python-dateutil-2.9.0.post0 six-1.17.0 zipp-3.20.2 (myenv) aaa@kylin-pc:~/par/tpy3820$ python3 Python 3.8.20 (default, Oct 2 2024, 15:14:40) [GCC 6.3.0 20170516] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import matplotlib.pyplot as plt >>> >>> import numpy as np >>> >>> xpoints = np.array([0, 6]) >>> >>> ypoints = np.array([0, 60]) >>> >>> plt.plot(xpoints, ypoints) [<matplotlib.lines.Line2D object at 0x7f823c5730>] >>> >>> plt.show() <stdin>:1: UserWarning: Matplotlib is currently using agg, which is a non-GUI backend, so cannot show the figure.

将上述错误信息在网上搜索,

https://blog.csdn.net/qq_41073715/article/details/105033751 说agg是一个没有图形显示界面的终端,常用的有图形界面显示的终端有TkAgg等。用如下语句可以解决。

importmatplotlib matplotlib.use('TkAgg')importmatplotlib.pyplotasplt

但是没有解决。还是报错

>>>importmatplotlib>>>print(matplotlib.get_backend())agg>>>matplotlib.use('TkAgg')Traceback(most recent call last):File"<stdin>",line1,in<module>File"/home/aaa/par/cpython-3.8.20+20241002-aarch64-unknown-linux-gnu-install_only_stripped/python/lib/python3.8/site-packages/matplotlib/__init__.py",line1237,inuse plt.switch_backend(name)File"/home/aaa/par/cpython-3.8.20+20241002-aarch64-unknown-linux-gnu-install_only_stripped/python/lib/python3.8/site-packages/matplotlib/pyplot.py",line271,inswitch_backend backend_mod=importlib.import_module(File"/home/aaa/par/cpython-3.8.20+20241002-aarch64-unknown-linux-gnu-install_only_stripped/python/lib/python3.8/importlib/__init__.py",line127,inimport_modulereturn_bootstrap._gcd_import(name[level:],package,level)File"<frozen importlib._bootstrap>",line1014,in_gcd_import File"<frozen importlib._bootstrap>",line991,in_find_and_load File"<frozen importlib._bootstrap>",line975,in_find_and_load_unlocked File"<frozen importlib._bootstrap>",line671,in_load_unlocked File"<frozen importlib._bootstrap_external>",line843,inexec_module File"<frozen importlib._bootstrap>",line219,in_call_with_frames_removed File"/home/aaa/par/cpython-3.8.20+20241002-aarch64-unknown-linux-gnu-install_only_stripped/python/lib/python3.8/site-packages/matplotlib/backends/backend_tkagg.py",line1,in<module>from.import_backend_tk File"/home/aaa/par/cpython-3.8.20+20241002-aarch64-unknown-linux-gnu-install_only_stripped/python/lib/python3.8/site-packages/matplotlib/backends/_backend_tk.py",line24,in<module>from.import_tkagg ImportError:module'_tkinter'has no attribute'__file__'

再搜module '_tkinter' has no attribute '__file__'
原来是Matplotlib库的一个设计问题。有人已经发issue了:https://github.com/matplotlib/matplotlib/issues/23074
简单地说,uv的cpython静态链接了tk库,而Matplotlib按照动态库的文件名去找__file__,当然找不到,就报错了。
原帖下也没有具体解决方法,我试了更新版本,结果3.7.5已经是支持python 3.8的最新版了。
再回到问题本身,plt.plot()是成功的,只是plt.show()无法显示,那么把plt先保存到文件,然后显示文件就行了。

>>>plt.plot(xpoints,ypoints)[<matplotlib.lines.Line2Dobjectat0x7fab4707f0>]>>>>>>plt.savefig('my_plot.png')>>>fromPILimportImage>>>img=Image.open("my_plot.png")>>>img.show()>>>日志记录文件:/home/aaa/.log/kylin-photo-viewer.log
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/30 5:02:12

剧本工业级输出|像素剧本圣殿支持Final Draft格式导出预研进展

剧本工业级输出&#xff5c;像素剧本圣殿支持Final Draft格式导出预研进展 1. 像素剧本圣殿简介 Pixel Script Temple&#xff08;像素剧本圣殿&#xff09;是一款基于Qwen2.5-14B-Instruct大模型深度微调的专业剧本创作工具。这款工具将先进的AI推理能力与独特的8-Bit复古美…

作者头像 李华
网站建设 2026/4/30 5:03:35

Flowise效果展示:Flowise构建的法律合同比对助手生成差异报告

Flowise效果展示&#xff1a;Flowise构建的法律合同比对助手生成差异报告 1. 引言&#xff1a;当法律遇上AI&#xff0c;合同审查不再头疼 想象一下这个场景&#xff1a;法务同事小李&#xff0c;正对着两份长达50页的合同草案发愁。一份是公司内部拟定的初稿&#xff0c;另一…

作者头像 李华
网站建设 2026/4/30 5:07:15

【链路追踪】Spring AOP赋能xxl-job:实现定时任务日志traceId无缝集成

1. 为什么需要给xxl-job注入traceId&#xff1f; 在分布式系统中&#xff0c;一个请求可能会经过多个服务&#xff0c;每个服务又会调用其他服务&#xff0c;形成复杂的调用链。这时候如果没有一个全局唯一的标识符来串联这些日志&#xff0c;排查问题就会变得异常困难。想象一…

作者头像 李华
网站建设 2026/4/30 5:05:42

AQATrack开源模型探索

配置环境&#xff1a;按照readme说明书&#xff0c;傻瓜式探索anaconda终端输入conda create -n aqatrack python3.8 conda activate aqatrack bash install.sh最后一行Windows系统可能会报错&#xff0c;缺少whl之类的&#xff0c;没关系&#xff0c;咱们打开PyCharm&#xff…

作者头像 李华
网站建设 2026/4/30 5:12:59

M2LOrder一键部署教程:基于Ubuntu20.04的快速环境搭建

M2LOrder一键部署教程&#xff1a;基于Ubuntu20.04的快速环境搭建 你是不是也对那些能“看懂”人情绪的AI应用感到好奇&#xff1f;比如&#xff0c;让AI分析一段文字是开心还是沮丧&#xff0c;或者判断一张图片里的人是惊讶还是平静。今天&#xff0c;我们就来动手部署一个这…

作者头像 李华
网站建设 2026/4/30 6:05:01

遥感影像处理必备:用Python+GDAL高效计算.tif文件各波段均值方差

遥感影像处理必备&#xff1a;用PythonGDAL高效计算.tif文件各波段均值方差 遥感影像分析中&#xff0c;波段统计量计算是基础却关键的一环。无论是辐射校正、分类算法还是深度学习预处理&#xff0c;均值和方差的计算都直接影响后续分析质量。传统GIS软件如ArcGIS虽然提供可视…

作者头像 李华