python pyecharts 动态更改js_host

本文探讨了PyEcharts生成的图表在内网部署时,因无法访问远端JS资源而遇到的问题,并提供了三种解决方案,包括修改Base类的js_host属性、调整globals配置及使用构造函数传值。
部署运行你感兴趣的模型镜像

pyecharts  生成的图表的html页面中,引用了远端的js地址https://assets.pyecharts.org/assets/**/xxx.js

有时可能服务部署在内网,无法访问远端的地址,需要将引用的地址放到服务本地。

询问度娘,提供了一种解决办法,需要继承Page,重写js_host值 参考地址

通过查看源码,发现 继承关系: Bar ->RectChart ->Chart->Base  

方法:1:

js_host 作为Base 的一个属性,因此,在Base初始化完成,直接设置js_host即可 

 

方法2:globals.CurrentConfig.ONLINE_HOST  这个需要放置在图表组件的前面

方法3:使用构造函数传值

综上,完成 

 

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

/root/.conda/envs/Finaltest/bin/python /root/IdeaProjects/Finaltest/showdata.pyTraceback (most recent call last): File "/root/IdeaProjects/Finaltest/showdata.py", line 279, in <module> eval(funcStr)(index) File "/root/IdeaProjects/Finaltest/showdata.py", line 38, in drawChart_1 .render("/home/hadoop/result/result1/result1.html") File "/root/.conda/envs/Finaltest/lib/python3.10/site-packages/pyecharts/charts/base.py", line 97, in render return engine.render(self, path, template_name, env, **kwargs) File "/root/.conda/envs/Finaltest/lib/python3.10/site-packages/pyecharts/render/engine.py", line 92, in render RenderEngine(env).render_chart_to_file( File "/root/.conda/envs/Finaltest/lib/python3.10/site-packages/pyecharts/render/engine.py", line 76, in render_chart_to_file write_utf8_html_file(path, html) File "/root/.conda/envs/Finaltest/lib/python3.10/site-packages/pyecharts/render/engine.py", line 18, in write_utf8_html_file with open(file=file_name,NotADirectoryError: [Errno 20] Not a directory: '/home/hadoop/result/result1/result1.html' 怎么修改下面的代码 import datetimeimport uuidimport simplejson as jsonfrom jinja2 import Environmentfrom ..commons import utilsfrom ..globals import CurrentConfig, RenderType, ThemeTypefrom ..options import InitOpts, RenderOptsfrom ..options.series_options import BasicOpts, AnimationOptsfrom ..render import enginefrom ..types import Optional, Sequence, Unionfrom .mixins import ChartMixinclass Base(ChartMixin): """ `Base` is the root class for all graphical class, it provides part of the initialization parameters and common methods """ def __init__( self, init_opts: Union[InitOpts, dict] = InitOpts(), render_opts: Union[RenderOpts, dict] = RenderOpts(), ): _opts = init_opts if isinstance(init_opts, InitOpts): _opts = init_opts.opts _render_opts = render_opts if isinstance(render_opts, RenderOpts): _render_opts = render_opts.opts self.width = _opts.get("width", "900px") self.height = _opts.get("height", "500px") self.horizontal_center = ( "text-align:center; margin: auto" if _opts.get("is_horizontal_center", False) else "" ) self.renderer = _opts.get("renderer", RenderType.CANVAS) self.page_title = _opts.get("page_title", CurrentConfig.PAGE_TITLE) self.theme = _opts.get("theme", ThemeType.WHITE) self.chart_id = _opts.get("chart_id") or uuid.uuid4().hex self.fill_bg = _opts.get("fill_bg", False) self.bg_color = _opts.get("bg_color") self.options: dict = {} self.render_options: dict = {} self.js_host: str = _opts.get("js_host") or CurrentConfig.ONLINE_HOST self.js_functions: utils.OrderedSet = utils.OrderedSet() self.js_dependencies: utils.OrderedSet = utils.OrderedSet("echarts") self.js_events: utils.OrderedSet = utils.OrderedSet() self.options.update(backgroundColor=self.bg_color) if isinstance(_opts.get("animationOpts", AnimationOpts()), dict): self.options.update(_opts.get("animationOpts", AnimationOpts().opts)) else: self.options.update(_opts.get("animationOpts", AnimationOpts()).opts) self.options.update(aria=_opts.get("ariaOpts")) self._is_geo_chart: bool = False self._geo_json_name: Optional[str] = None self._geo_json: Optional[dict] = None self.render_options.update(embed_js=bool(_render_opts.get("embed_js"))) self._render_cache: dict = dict() def use_echarts_stat(self): self.js_dependencies.add("echarts-stat") return self def get_chart_id(self) -> str: return self.chart_id def get_options(self) -> dict: return utils.remove_key_with_none_value(self.options) def dump_options(self) -> str: return utils.replace_placeholder( json.dumps(self.get_options(), indent=4, default=default, ignore_nan=True) ) def dump_options_with_quotes(self) -> str: return utils.replace_placeholder_with_quotes( json.dumps(self.get_options(), indent=4, default=default, ignore_nan=True) ) def render( self, path: str = "render.html", template_name: str = "simple_chart.html", env: Optional[Environment] = None, **kwargs, ) -> str: self._prepare_render() return engine.render(self, path, template_name, env, **kwargs) def render_embed( self, template_name: str = "simple_chart.html", env: Optional[Environment] = None, **kwargs, ) -> str: self._prepare_render() return engine.render_embed(self, template_name, env, **kwargs) def render_notebook(self): self.chart_id = uuid.uuid4().hex self._prepare_render() return engine.render_notebook( self, "nb_jupyter_notebook.html", "nb_jupyter_lab.html" ) def _use_theme(self): if self.theme not in ThemeType.BUILTIN_THEMES: self.js_dependencies.add(self.theme) def _prepare_render(self): self.json_contents = self.dump_options() self._use_theme() self._render_cache.clear() if self.render_options.get("embed_js"): self._render_cache[ "javascript" ] = self.load_javascript().load_javascript_contents()def default(o): if isinstance(o, (datetime.date, datetime.datetime)): return o.isoformat() if isinstance(o, utils.JsCode): return ( o.replace("\\n|\\t", "").replace(r"\\n", "\n").replace(r"\\t", "\t").js_code ) if isinstance(o, BasicOpts): if isinstance(o.opts, Sequence): return [utils.remove_key_with_none_value(item) for item in o.opts] else: return utils.remove_key_with_none_value(o.opts)
06-19
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值