首页 > 其他分享 >解决proplot和Matplotlib版本冲突问题

解决proplot和Matplotlib版本冲突问题

时间:2024-01-31 10:27:13浏览次数:27  
标签:canvas 版本 proplot Matplotlib renderer str ori path

非原创,但忘记来源了,原作者看到请评论或后台联系我添加版权

在环境内运行PY代码


import importlib
import os
import re
import subprocess
import sys
import logging


logging.basicConfig(level=logging.DEBUG, format=' %(asctime)s - %(levelname)s -%(message)s')


# Just need matplotlib and numpy :)
subprocess.check_output([sys.executable, "-m", "pip", "install", 'numpy', 'matplotlib'])
subprocess.check_output([sys.executable, "-m", "pip", "install", 'proplot', '--no-dependencies'])


proplot_path = importlib.machinery.PathFinder().find_spec('proplot').submodule_search_locations[0]


def alter(file, old_str, new_str):
    with open(file, "r", encoding="utf-8") as f1, open(f"{file}.bak", "w", encoding="utf-8") as f2:
        txt = f1.read()
        changed_txt = re.sub(old_str, new_str, txt, re.S | re.M)
        f2.write(changed_txt)


    os.remove(file)
    os.rename(f"{file}.bak", file)


ori_path_1 = os.path.join(proplot_path, 'colors.py')
ori_str_1 = \
"""    attr = '_cmap_registry' if hasattr\(mcm, '_cmap_registry'\) else 'cmap_d'"""
new_str_1 = \
"""    # attr = '_cmap_registry' if hasattr(mcm, '_cmap_registry') else 'cmap_d'
    attr = '_colormaps' if hasattr(mcm, '_colormaps') else 'cmap_d'"""


ori_path_2 = os.path.join(proplot_path, 'figure.py')
ori_str_2 = \
"""        if self\._cachedRenderer:
            renderer = self\._cachedRenderer"""
new_str_2 = \
"""        # if self._cachedRenderer:
        # renderer = self._cachedRenderer
        # if self.canvas._get_renderer():
        # renderer = self.canvas._get_renderer()
        # else:
        canvas = self.canvas
        if canvas and hasattr(canvas, 'get_renderer'):
            renderer = canvas.get_renderer()"""


ori_path_3 = os.path.join(proplot_path, 'figure.py')
ori_str_3 = \
"""            canvas = self\.canvas
            if canvas and hasattr\(canvas, 'get_renderer'\):
                renderer = canvas\.get_renderer\(\)
            else:
                from matplotlib\.backends.backend_agg import FigureCanvasAgg
                canvas = FigureCanvasAgg\(self\)
                renderer = canvas\.get_renderer\(\)"""
new_str_3 = \
"""            # from matplotlib.backends.backend_agg import FigureCanvasAgg
            # canvas = FigureCanvasAgg(self)
            # renderer = canvas.get_renderer()
            from matplotlib import backend_bases
            renderer = backend_bases._get_renderer(self)"""


ori_path_4 = os.path.join(proplot_path, 'internals/rcsetup.py')
ori_str_4 = "CMAPSEQ = 'Fire'"
new_str_4 = "CMAPSEQ = 'magma'"
ori_path_5 = os.path.join(proplot_path, '__init__.py')
ori_str_5 = "import pkg_resources as pkg"
new_str_5 = "import importlib_metadata"


ori_path_6 = os.path.join(proplot_path, '__init__.py')
ori_str_6 = \
"""try:
    version = __version__ = pkg\.get_distribution\(__name__\)\.version
except pkg\.DistributionNotFound:
    version = __version__ = 'unknown'"""
new_str_6 = "version = __version__ = importlib_metadata.metadata('proplot').get('version')"


alter(ori_path_1, ori_str_1, new_str_1)
alter(ori_path_2, ori_str_2, new_str_2)
alter(ori_path_3, ori_str_3, new_str_3)
alter(ori_path_4, ori_str_4, new_str_4)
alter(ori_path_5, ori_str_5, new_str_5)
alter(ori_path_6, ori_str_6, new_str_6)


try:
    proplot = importlib.import_module('proplot')
    print(f"proplot安装成功 version: {proplot.__version__}")
except Exception as e:
    print(f"proplot安装失败: {e}")

标签:canvas,版本,proplot,Matplotlib,renderer,str,ori,path
From: https://www.cnblogs.com/geoli/p/17998634

相关文章

  • nginx-go-crossplane crossplane golang 版本的nginx 配置解析包
    nginx-go-crossplane属于python版本crossplanenginx配置解析包的golang移植可以实现nginx配置解析转换为json格式的数据,当然也支持将json转换为nginx配置格式说明对于希望基于nginx搞自己的流量统一平台,同时希望基于api管理的,nginx-go-crossplane是一个很不错的选择......
  • .Net Core3.1 升级到8.0(3.1升级到更高版本)
    NETCore3.1已经用了很长一段时间,其实在2022年的年底微软已经不提供支持了,后面的一个 LTS 版本.NET6也会在2024年11月终止支持,所以直接升级到.NET8是最好的选择。微软官方推出了升级工具:UpgradeAssistant,链接地址如下:https://dotnet.microsoft.com/zh-cn/plat......
  • 【Java】Java版本升级,找不到符号 问题处理
    哈喽,各位早上/中午/晚上好呀!JDK21出了也有一段时间了,有的小伙伴也按捺不住开始将项目升级到JDK21了吧。既然升级,大概多多少少都会遇到“找不到符号”的问题,英文原文是“cannotfindsymbol”。如何解决呢?以下方式不止针对于升级到JDK21,其它版本的升级配置方法相同。其实Idea......
  • etcd v2 版本数据备份恢复脚本
    importrequestsimportjsonimportsysaction=sys.argv[1]etcdaddr=sys.argv[2]defbackup_data():url=f"{etcdaddr}/v2/keys/?recursive=true"response=requests.get(url)ifresponse.status_code==200:data=res......
  • 更改linux默认启动内核版本,修改 GRUB 设置
    简介:在本文中,我们将讨论如何在GRUB引导加载器中更改默认启动的Linux内核版本。这对于在多个内核版本间切换非常有用。已在Ubuntu上验证可用。告别直接修改/boot/grub/grub.cfg的土办法。查看目前linux上面的内核版本#方法一ls/boot/vmlinuz-*#方法二:cat/boot/grub/......
  • 查询SQL SERVER 软件版本信息、授权许可等
    SQLSERVER软件授权许可查询概述在使用SQLServer数据库管理系统时,了解软件授权许可是非常重要的。SQLServer提供了多种许可方式,以满足不同用户的需求。本文将介绍SQLServer软件授权许可的查询方法,并提供相应的代码示例。许可方式SQLServer提供了多种许可方式,包括:企业......
  • 如何查看KylinOS银河麒麟操作系统版本
    方式一:[root@Sky019899sky019899]#nkvers##############KylinLinuxVersion#################Release:KylinLinuxAdvancedServerreleaseV10(Lance)Kernel:4.19.90-52.22.v2207.ky10.x86_64Build:KylinLinuxAdvancedServerreleaseV10(SP3)/(Lance)-x86......
  • Nacos 官网重大升级,提供官方发行版下载包,3.0 里程碑版本新特性预告
    作者:袁坤(丹坤)、黄子纯(梓莼)、朱颜(竞竞)、季敏(清铭)、杨翊(席翁)、王晨(望宸)、邢学超(于怀)什么是Nacos以及 nacos.ioNacos/nɑ:kəʊs/是Dynamic Namingand Configuration Service的首字母简称,Nacos开源产品定位是更易于构建云原生应用的动态服务发现、配置管理和......
  • 解决 JUnit 版本引起的 SpringBoot 测试环境加载问题
    SpringBoot项目初始化后尝试自己编写测试类时报错空指针异常,在此记录下解决方法,如有错误,欢迎指正!1.问题描述1.1报错信息在执行SpringBoot单元测试时遇到如下报错信息:java.lang.NullPointerException atcom.thr.usercenter.SampleTest.testSelect(SampleTest.java:25......
  • python版本管理Dynaconf模块
    示例代码importosimportsysfrompathlibimportPathfromdynaconfimportDynaconf_BASE_DIR=Path(__file__).parent.parent_CONFIG_DIR=_BASE_DIR/'config'LOG_DIR=_BASE_DIR/'files'/'logs'TOKEN_FILE=_BASE_DIR/�......