aardio教程) 搭建自己的扩展库仓库

这篇具有很好参考价值的文章主要介绍了aardio教程) 搭建自己的扩展库仓库。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

aardio中有些经常使用的库,换个项目总需要复制一下,还不便于修改。虽然可以直接把它放到aardio\lib目录下,也是不便于共享给其他人使用。

最近偶然翻到编辑器里的工具->开发环境->扩展库发布工具,就想着可以像官方一样,发布自己的扩展库,也便于分享给大家使用,最好能像官方扩展库一样在线安装。

阅读官方代码

翻了一下代码,其实官方扩展库的逻辑也很简单,先请求一遍所有扩展库列表,这是个json文件。

里面包含扩展库的基本信息和下载的url,下载的格式是.tar.lzma,而上面的扩展库发布工具就是将库打包成这个格式。

当你要安装某个库时,就会把它下载并解压到aardio\lib文件夹下。

写好的成品

下面是我弄的扩展库,目前库只有几个,基本都是我最近才写的,有兴趣的可以去github下载测试下bug。

aardio教程) 搭建自己的扩展库仓库

欢迎大家共享一些常用库,减少造轮子的时间。

开源地址

搭建的代码放到github了,你可以简单的修改代码里面的仓库地址来做一个自己的扩展仓库

github:https://github.com/kanadeblisst00/aardio-extlibs

github的访问国内偶尔会抽风,所以我扩展库里的下载地址放的是国内服务器搭建的镜像仓库(它会每10分钟同步上面github的数据)

国内加速仓库: http://git.pygrower.cn/kanadeblisst/aardio-extlibs

使用方法

先下载extlibs.aardio这个文件到本地(只需要这个文件,其他都是打包的代码,这个是下载的代码)

把它重命名为5.extlibs.aardio,移动到aardio\tools文件夹下,该目录下还有个1.ext.aardio文件,这是官方扩展库。

接着重新打开aardio的编辑器,就可以在工具里看到有个非官方扩展库。使用方法和上面的扩展库是一样的,运行它选择需要安装的库,它就会下载好放到aardio\lib目录下

aardio教程) 搭建自己的扩展库仓库

搭建教程

上面的仓库里的代码就是搭建的全部代码。这里我简单的说一下这些代码流程

目录结构

  • dist: 打包后的文件,用于在extlibs.aardio里远程下载安装
  • lib: 库代码
  • res: 库的使用案例
  • main.aardio: 将lib下的库打包压缩到dist里

搭建步骤

将你需要打包的库放在lib目录下,然后打开这个项目并运行。它会将lib下的所有库打包成tar文件放在dist\package目录下。

还会将res目录存放的案例打包成zip放到dist\samples下,同时生成库的json信息。而dist\exlibs.json是所有库的汇总信息。

格式如下:

{
    "goquery":{
        "author":"kanadeblisst",
        "description":"goquery封装库,用于解析HTML",
        "url":"http://git.pygrower.cn/kanadeblisst/aardio-extlibs/raw/branch/master/dist/package/goquery.tar.lzma",
        "version":"1.0.0.1",
        "weight":1
    }
}

后面只需把项目代码(extlibs.aardiomain.aardio)里的git地址换成你自己的git地址

thread.set("GithubRepo", "http://git.pygrower.cn/kanadeblisst/aardio-extlibs");

具体流程

运行了项目之后就会在dist目录下生成需要的文件,而这些文件都可以通过链接直接访问到。

比如exlibs.json的链接就是仓库地址+ /raw/branch/master/dist/exlibs.json,这样就能下载到所有的库信息,然后把它显示到界面。

下载的函数只需要在ide.requestLibInfo这个库函数基础上修改下url,代码如下

var requestLibInfo = function(libName){
	return ..thread.invokeAndWait(
		function(libName){
			import web.rest.jsonLiteClient;
			
			var repoUrl = thread.get("GithubRepo");
			var url = repoUrl + "/raw/branch/master/dist/exlibs.json";
			var http = web.rest.jsonLiteClient(null,"");
			var libApi = http.api(url)
			var listLib = libApi.get();
			http.close();
			var lib;
			if(libName){
				lib = listLib[libName];
				lib["libName"] = libName;
			}else{
				lib = listLib;
			}
			
			return lib;
		},libName
	) 
};

requestLibInfo

官方使用的ide.requestLibInfo来下载库信息。但url是在函数里写死的,我并不想修改ide这个库的代码,又想让这个函数去我指定的链接下载库信息,怎么操作最方便?

最先想到的肯定是将var libs = ide.requestLibInfo();改成var libs = requestLibInfo();,我不用它就行了。

但有个问题ide.installLib方法也被使用了,而且还调用了ide.requestLibInfo,难道又要重写installLib?

偷懒的修改方式

当然不用,修改的话很简单,只需要多加一行代码:

import ide;
ide.requestLibInfo = requestLibInfo;
var libs = ide.requestLibInfo();

新增了ide.requestLibInfo = requestLibInfo;这行代码后,在ide.installLib里调用的ide.requestLibInfo也会被替换成我的函数。

这样就只多了一行代码,不用去重写多个函数。如果在多线程使用的话,同样需要新增这行代码。

hook

上面这个思路其实很常见,专业名词的话是hook。比如我之前写的Python调用ocr,有人提了个需求:https://github.com/kanadeblisst00/wechat_ocr/issues/6

aardio教程) 搭建自己的扩展库仓库

这个需求很小众,根本不用去修改库代码来实现,只需要hook一下print就能做到:

import builtins

def my_print(*args, **kwargs):
    pass
builtins.print = my_print

如果只想过滤某个模块的print,可以通过inspect模块获取上上层调用的函数和所在模块,根据函数名或模块名就能过滤掉指定模块的print打印

import builtins


def caller_info():
    # 获取当前帧的上一帧,即调用者的帧
    caller_frame = inspect.currentframe().f_back.f_back
    # 获取调用者所在的模块和函数
    caller_module = inspect.getmodule(caller_frame)
    caller_name = caller_frame.f_code.co_name
    # 如果能获取到调用者模块,则提取模块名;否则为None
    module_name = caller_module.__name__ if caller_module else None
    return module_name, caller_name

old_print = builtins.print

def my_print(*args, **kwargs):
    module_name, caller_name = caller_info()
    if "ocr" not in module_name:
        old_print(*args, **kwargs)
builtins.print = my_print

本文由博客一文多发平台 OpenWrite 发布!文章来源地址https://www.toymoban.com/news/detail-843706.html

到了这里,关于aardio教程) 搭建自己的扩展库仓库的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Git篇如何在自己服务器搭建自己的git私有仓库

    要在自己的服务器上搭建自己的Git私有仓库,可以按照以下步骤进行操作: 安装Git服务器软件:选择一款适合的Git服务器软件,如GitLab或GitHub,并按照官方文档进行安装和配置。 创建数据库:如果使用GitLab,需要创建一个数据库来存储用户信息、项目和代码。根据所选的服

    2024年02月03日
    浏览(64)
  • 【Docker】使用 Docker Registry 搭建自己的 Docker 镜像仓库

    在使用 Docker 进行应用程序的开发和部署时,使用 Docker 镜像仓库是一个很好的实践。它允许集中存储和管理 Docker 镜像,方便团队协作和版本控制。在本文中,将介绍如何使用 Docker Registry 搭建自己的 Docker 镜像仓库,并提供配置文件和配置说明。 Docker Registry 是官方提供的开

    2024年02月13日
    浏览(38)
  • aardio教程五) 写Python风格的aardio代码(字符串篇)

    熟悉一个新的语言最麻烦的就是需要了解一些库的使用,特别是基础库的使用。 所以我想给aardio封装一个Python风格的库,Python里的基础库是什么方法名,aardio里也封装同样的方法名。 这样就不需要单独去了解aardio里一些方法的使用细节,可以很方便的将Python代码改成aardio代

    2024年04月08日
    浏览(41)
  • aardio教程二) 进阶语法

    aardio中除了基础数据类型外,其他的复合对象都是table(例如类和名字空间等)。table可以用来存放aardio的任何对象,包括另一个table。 在其他语言中的字典、列表、数组、集合映射等,在aardio中都使用table来实现。 创建字典 创建数组 数组和字典可以混用 使用class定义类

    2024年03月18日
    浏览(57)
  • aardio教程一) 基础语法-下

    条件判断语句 使用 if 、 elseif 和 else 来对变量或表达式进行判断 也可以使用 select 对变量或表达式进行判断,也就是JavaScript中的 switch 语句,有一点不同的是,无需每个case都写一个break。 循环语句 aardio中的循环有 while 、 for 、 do while 和 for in ,而while又有两种语法 第一种

    2024年03月16日
    浏览(43)
  • aardio教程一) 基础语法-上

    想开发一些小工具,所以想系统性的学习一遍aardio,之前都是哪里不会搜哪里,顺便写些教程。我的主要语言是Python,所以会以Python作为对比来加深印象。 aardio的基础语法和JavaScript基本类似,如果你学过JavaScript,aardio很容易上手。下面的文档来自官方文档 [1] 问题搜索途径

    2024年03月15日
    浏览(84)
  • aardio教程三) 元表、元方法

    还有个迭代器,基础语法基本已经说完了,后面想到啥再补充,之后的教程会从以下方面来讲: 基础库的使用,比如string、table等 基础控件的使用,比如listview、tab等 aardio和Python交互,比如给Python写个界面 自带的范例程序 我写的一些小程序 当然,我的理解也是很基础的,特

    2024年03月20日
    浏览(44)
  • Dockerfile快速搭建自己专属的LAMP环境,生成镜像lamp:v1.1,并推送到私有仓库

    环境: CentOS 7 Linux 3.10.0-1160.el7.x86_64 具体要求如下: (1)基于centos:6基础镜像; (2)指定作者信息; (3)安装httpd、mysql、mysql-server、php、php-mysql、php-gd; (4)暴露80和3306端口; (5)设置服务自启动。 (6)验证镜像。 步骤 ①创建项目目录 ②创建Dockerfile ③构建 Docke

    2024年02月11日
    浏览(40)
  • 【GitLab私有仓库】在Linux上用Gitlab搭建自己的私有库并配置cpolar内网穿透

    GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的Web服务。 Gitlab是被广泛使用的基于git的开源代码管理平台, 基于Ruby on Rails构建, 主要针对软件开发过程中产生的代码和文档进行管理, Gitlab主要针对group和project两个维度进行代码和

    2023年04月12日
    浏览(44)
  • 【GitLab私有仓库】如何在Linux上用Gitlab搭建自己的私有库并配置cpolar内网穿透?

    GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的Web服务。 Gitlab是被广泛使用的基于git的开源代码管理平台, 基于Ruby on Rails构建, 主要针对软件开发过程中产生的代码和文档进行管理, Gitlab主要针对group和project两个维度进行代码和

    2024年02月12日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包