Lua 包管理工具 Luarocks 详解-程序员宅基地

技术标签: git  markdown  lua  

高效Lua包管理工具Luarocks

讨论话题

  1. 什么是 Luarocks

  2. 源码安装部署 Luarocks

  3. 注册 Luarocks 为 Lua 社区贡献自己的代码

  4. Luarocks 使用初探

什么是 Luarocks

Luarocks 是一个 Lua 包管理器,基于 Lua 语言开发,提供一个命令行的方式来管理 Lua 包依赖、安装第三方 Lua 包等,社区比较流行的包管理器之一,另还有一个 LuaDist,Luarocks 的包数量比 LuaDist 多,更细节的两者对比可参阅 这里

源码安装部署 Luarocks

(为何使用源码见 此文

wget http://luarocks.org/releases/luarocks-2.2.2.tar.gz
tar zxvf luarocks-2.2.2.tar.gz
cd luarocks-2.2.2
./configure --help

configure help 查看所支持的安装配置,这里我们主要关注以下两个

--prefix=DIR                Prefix where LuaRocks should be installed.
                            Default is /usr/local
--with-lua=PREFIX           Use Lua from given prefix.
                            Default is auto-detected (the parent directory of $LUA_BINDIR).

--prefix 设置 Luarocks 安装路径,--with-lua 指定 Luarocks 依赖的 Lua 安装路径。

为何强调设置 --prefix

设置 prefix 会自动将 Luarocks 以及往后使用 Luarocks 安装的 Lua 包,LuaC 包都安装到 Luarocks 安装路径下的相应位置,否则相关的包文件散落在文件系统中,显得杂乱不便于管理,如果所安装的 Lua 模板包含 bin 文件,则会自动安装到此目录下的 bin 路径,与 Luarocks 可执行文件同一路径,更便于管理、使用。

./configure --prefix=/usr/local/luarocks-2.2.2 --with-lua=/usr/local/lua-5.1.5
make build
make install

安装完成后,直接运行 luarocks 即可使用。

 // luarocks

LuaRocks 2.2.2, a module deployment system for Lua

NAME
  /usr/local/bin/luarocks - LuaRocks main command-line interface

注册 Luarocks 为 Lua 社区贡献自己的代码

当前 IT 技术发展惊人的快,很大程度上与开源社区的快速发展有直接关系,大家一起分享知识、经验、解决方案,互相支持、协作。我们从社区汲取养分,学习成长,回过头来我们也需要回馈社区,这才是一个良性循环。

使用 Luarocks 为 Lua 社区贡献代码非常简单,只需如下几步:

  1. 官网 注册一个 luarocks 账号

  2. 在官网 <a name="api-key"> 设置 页面生成 API-Keys(用作包提交的验证)

  3. 在项目根目录根据 rockspec 文件格式书写你自己的 rockspec 文件(或者在项目根目录运行 luarocks write_rockspec 命令自动生成)

  4. 使用 API-key 上传你的项目到 luarocks.org(命令行运行 luarocks upload --api-key=

  5. 在你的项目 页面 点击下图所示的 Add To Manifest 将你的项目添加到相关分类方便分类检索,默认已经在 root 里。

将你的项目添加到相关分类

Luarocks 使用初探

命令行运行luarocks,或者luarocks help能看到相关luarocks的详细信息,大致分为以下6个段。

  1. NAME/名称 显示 Luarocks 说明信息 - LuaRocks main command-line interface

  2. SYNOPSIS/概要 显示luarocks命令参数使用格式:

    luarocks [--from=<server> | --only-from=<server>] [--to=<tree>] [VAR=VALUE]... <command> [<argument>]
  3. GENERAL OPTIONS/通用选项 被所有命令所支持的选项,包含指定搜索 rocks/rockspecs 的 server,默认的 server 搜寻顺序为:

    https://luarocks.org
    https://raw.githubusercontent.com/rocks-moonscript-org/moonrocks-mirror/master/
    http://luafr.org/moonrocks/
    http://luarocks.logiceditor.com/rocks

    另外选项还设置是否仅仅下载源码、是否显示安装过程、指定超时时间等。

  4. VARIABLES/变量 Variables from the "variables" table of the configuration file can be overriden with VAR=VALUE assignments.

  5. COMMANDS/命令列表 luarocks 的常规操作命令 install、search、list 等

  6. CONFIGURATION/相关配置信息 Lua 版本,rocks trees 等安装 luarocks 时的配置

在 luarocks 使用中我们主要关注 GENERAL OPTIONS、和 COMMANDS 两项。GENERAL OPTIONS 与其他 COMMANDS 配合使用。以搜索香草/vanilla 框架(一个基于 Lua 开发的 Openresty Web 应用开发框架)为例:

 // luarocks search vanilla        #直接搜索vanilla

Search results:
===============
Rockspecs and source rocks:
---------------------------
vanilla
   0.1.0-1 (rockspec) - https://luarocks.org
   0.1.0-1 (src) - https://luarocks.org
   0.0.1-1 (rockspec) - https://luarocks.org
   0.0.1-1 (src) - https://luarocks.org

也可以在命令后加上一个 GENERAL OPTIONS/通用选项比如 --verbose 来显示整个命令运行过程(这对排查安装中遇到的问题非常有用)。

 // luarocks search vanilla --verbose      #添加参数显示整个搜索vanilla的过程

os.execute:   'curl' -k -f -L --user-agent 'LuaRocks/2.2.2 macosx-x86_64 via curl' --connect-timeout 30 'https://luarocks.org/manifest-5.1.zip' 2> /dev/null 1> '/Users/zhoujing/.cache/luarocks/https___luarocks.org/manifest-5.1.zip'
Results: 1
  1 (number): 0

os.execute:   unzip -n '/Users/zhoujing/.cache/luarocks/https___luarocks.org/manifest-5.1.zip'
Archive:  /Users/zhoujing/.cache/luarocks/https___luarocks.org/manifest-5.1.zip
  inflating: manifest-5.1
Results: 1
  1 (number): 0

Search results:
===============
Rockspecs and source rocks:
---------------------------
vanilla
   0.1.0-1 (rockspec) - https://luarocks.org
   0.1.0-1 (src) - https://luarocks.org
   0.0.1-1 (rockspec) - https://luarocks.org
   0.0.1-1 (src) - https://luarocks.org

命令的执行参数追加的格式如同SYNOPSIS描述的那样:

luarocks [--from=<server> | --only-from=<server>] [--to=<tree>] [VAR=VALUE]... <command> [<argument>]

可以使用 luarocks <command> help 查看 command 更细节的帮助文档,这也非常有用。

几个常用的 luarocks 命令详解

上面演示了 search 命令,看字面意思就很明白是用来搜索模块的,使用相对比较简单也容易理解,类似的命令还有 downloadhelpinstalllistnew_versionremoveupload 等,但是余下的几个命令也很重要,使用起来就不是那么好理解,下面以一个 test 的项目重点演示说明(每个命令使用时都建议先执行 luarocks <command> help 查看详细文档,下面仅截取各命令文档的 NAME 和 SYNOPSIS 段并详述、演示使用过程)。

 ~/Desktop/ tree ./t-luarocks
./t-luarocks
├── test
│   ├── spec
│   │   └── init.lua
│   ├── sys
│   │   ├── config.lua
│   │   └── vanilla.lua
│   └── v
│       ├── application.lua
│       ├── bootstrap.lua
│       ├── controller.lua
│       └── dispatcher.lua
└── test-0.0.rc1-1.rockspec
build
 ~/Desktop/t-luarocks/ luarocks help build
NAME
  /usr/local/bin/luarocks build - Build/compile a rock.
SYNOPSIS
  /usr/local/bin/luarocks build [--pack-binary-rock] [--keep] {<rockspec>|<rock>|<name> [<version>]}

build 命令用来基于 rock 二进制文件安装 Lua 包,前提 rock 文件基于规范的 rockspec文件打包,且 rockspec 包含正确的 build 段描述。

doc
 ~/Desktop/t-luarocks/ luarocks help doc
NAME
  /usr/local/bin/luarocks doc - Shows documentation for an installed rock.
SYNOPSIS
  /usr/local/bin/luarocks doc <argument>

doc 命令用来显示本地已经安装的 Lua 包根目录下所有的 Markdown 文档列表,并默认自动打开 README.md 文件,如果相应的 Lua 包本地并没有安装,则会到服务器(#server)上搜寻。

 ~/Desktop/t-luarocks/ luarocks doc vanilla
Documentation files for vanilla 0.1.0-1
---------------------------------------
/usr/local/luarocks-2.2.2/lib/luarocks/rocks/vanilla/0.1.0-1/doc/
  CHANGELOG.md
  LICENSE.md
  README-zh.md
  README.md
Opening /usr/local/luarocks-2.2.2/lib/luarocks/rocks/vanilla/0.1.0-1/doc/README.md ...
lint
 ~/Desktop/t-luarocks/ luarocks help lint
NAME
  /usr/local/bin/luarocks lint - Check syntax of a rockspec.
SYNOPSIS
  /usr/local/bin/luarocks lint <rockspec>

lint 命令用来检查当前目录 rockspec 文件(rockspec 文件为 Luarocks 包管理的描述文件,细节写法会另起文档描述)的格式,如果格式没问题则不会有任何显示,否则则暴露细节错误,指导修改。

make
 ~/Desktop/t-luarocks/ luarocks help make
NAME
  /usr/local/bin/luarocks make - Compile package in current directory using a rockspec.
SYNOPSIS
  /usr/local/bin/luarocks make [--pack-binary-rock] [<rockspec>]

make 命令基于一个 rockspec 文件安装 Lua 包,这个文件必须是本地的一个文件,而不像 install 那样可以是一个网络文件。这个命令还可以通过追加参数 --pack-binary-rock 而仅仅编译生成 rock 文件,make 命令与 install 命令的区别在于 install 基于 rock文件,而 make 必须基于 rockspec 文件。

pack
 ~/Desktop/t-luarocks/ luarocks help pack
NAME
  /usr/local/bin/luarocks pack - Create a rock, packing sources or binaries.
SYNOPSIS
  /usr/local/bin/luarocks pack {<rockspec>|<name> [<version>]}

pack 命令根据本地 rockspec 文件将 Lua 源码包打包成二进制的 rock 文件(install 命令基于 rock 文件进行安装)。

path
 ~/Desktop/t-luarocks/ luarocks help path
NAME
  /usr/local/bin/luarocks path - Return the currently configured package path.
SYNOPSIS
  /usr/local/bin/luarocks path

path 命令显示当前 Luarocks 所配置的 LUA_PATH 和 LUA_CPATH 值。

purge
 ~/Desktop/t-luarocks/ luarocks help purge
NAME
  /usr/local/bin/luarocks purge - Remove all installed rocks from a tree.
SYNOPSIS
  /usr/local/bin/luarocks purge --tree=<tree> [--old-versions]

purge 命令必须传入一个 --tree 参数,这里的 tree 其实是一个路径,luarocks 安装 Lua 包所在路径,purge 命令将这个路径下面所有的包都 remove。这个命令完全挽救了没有指定 --prefix 而安装 luarocks 的同学,在没有指定 --prefix 的时候 luarocks 将默认的安装到 /usr/local 路径下,基于此安装的包也将散落在整个 /usr/local 目录,真是太乱。这时候在命令行执行 luarocks purge --tree=/usr/local 整个世界都干净了。

show
 ~/Desktop/t-luarocks/ luarocks help show
NAME
  /usr/local/bin/luarocks show - Shows information about an installed rock.
SYNOPSIS
  /usr/local/bin/luarocks show <argument>

show 命令可用来显示包信息,这些信息来自于当前 Lua 包的 rockspec 文件中。

unpack
 ~/Desktop/t-luarocks/ luarocks help unpack
NAME
  /usr/local/bin/luarocks unpack - Unpack the contents of a rock.
SYNOPSIS
  /usr/local/bin/luarocks unpack [--force] {<rock>|<name> [<version>]}

unpack 命令将 pack 命令打包的 rock 解开。

upload
 ~/Desktop/t-luarocks/ luarocks help upload
NAME
  /usr/local/bin/luarocks upload - Upload a rockspec to the public rocks repository.
SYNOPSIS
  /usr/local/bin/luarocks upload [--skip-pack] [--api-key=<key>] [--force] <rockspec>

upload 命令会根据 rockspec 文件将当前 Lua 包打包成 rock 文件然后上传至 luarocks.org,上传需要添加一个在官网配置(#api-key) 过的 api-key 参数进行验证。

write_rockspec
 ~/Desktop/t-luarocks/ luarocks help write_rockspec
NAME
  /usr/local/bin/luarocks write_rockspec - Write a template for a rockspec file.
SYNOPSIS
  /usr/local/bin/luarocks write_rockspec [--output=<file> ...] [<name>] [<version>] {<url>|<path>}

write_rockspec 命令在当前目录自动生成一个 rockspec 文件骨架,一个 template,注意仅仅是一个骨架,有些参数必须落实,否则无法正常使用,比如 source、description 段的配置。

下面给出一个简单的 rockspec 文件模板,包含了 rockspec 文件的基本必选项:

package ="vanilla"
version ="0.1.0-1"

source ={
    url ="git://github.com/idevz/vanilla.git" #必须为可访问的在线库地址
}

description ={
    summary       ="A Lightweight Openresty Web Framework",
    homepage      ="http://idevz.github.io/vanilla",
    maintainer    ="zhoujing<[email protected]>",
    license       ="MIT"                    #必须指明所基于的开源协议
}

dependencies ={
    "lua=5.1",
    ... ...
    "lua-resty-http=0.06-0"
}

build ={
    type ="builtin",
    modules ={
        ["vanilla.v.view"]                      ="vanilla/v/view.lua",
        ... ...
        ["vanilla.v.views.rtpl"]                ="vanilla/v/views/rtpl.lua",
    },
    install ={
        bin ={ "bin/vanilla" }
    },
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_34038652/article/details/89507637

智能推荐

JAVA中正则表达式的应用 (二)-程序员宅基地

文章浏览阅读248次。现在JDK1.4以后里终于有了自己的正则表达式API包,JAVA程序员可以免去找第三方提供的正则表达式库的周折了,我们现在就马上来了解一下这个SUN提供的迟来恩物- -对我来说确实如此。

PostgreSQL 将时间戳转换成北京时间 AND 查询json中某个字段的值_pgsql +8时区转换北京时间-程序员宅基地

文章浏览阅读1k次。个人笔记~~~select a.id,a.log_at,to_char(to_timestamp(a.log_at/1000) AT TIME ZONE 'UTC-8','yyyy-MM-dd HH24:MI:SS') as time,b.profile::json->>'name',a.content from lecture_user_records a,users ..._pgsql +8时区转换北京时间

作为一个程序员写博客还是很有必要的-程序员宅基地

文章浏览阅读1.9k次。自己日后能用到,并希望能帮助到别人,为程序员生涯留下一点痕迹

DataGridView 定位行的问题_datagridview定位行不准-程序员宅基地

文章浏览阅读4.4k次。 添加,删除,查找之后希望 Grid定位到需要的行 Me.dgvPaper.Rows(i).Selected = True 设置能保证选中行,一旦找到了就定位到相应的位置,如果数据行很多的话,希望滚动条滚到相应的位置。 DataGridView控件有一个FirstDisplayedScrollingRowIndex属性,把需要定位的行index(N)赋值给这个属性之后,DataGridV_datagridview定位行不准

Mybatis插入数据行ID生成策略-程序员宅基地

文章浏览阅读127次。为什么80%的码农都做不了架构师?>>> ...

京东热-key-探测框架新版发布,单机-QPS-可达-35-万_jd-hotkey_AK774S的博客-程序员宅基地

文章浏览阅读3.6k次。还有一种热点数据的发现机制,那就是实时的做收集,比如在客户端、服务端或者在代理层,都可以对实时数据进行采集,然后进行统计汇总。达到一定的数量之后,就会被识别为热key如何解决热key问题解决热key问题最主要的方式就是加缓存。通过缓存的方式尽量减少系统交互,使得用户请求可以提前返回。这样即能提升用户体验,也能减少系统压力。缓存的方式有很多,有些数据可以缓存在客户的客户端浏览器中,有些数据可以缓存在距离用户就近的DNS中,有些数据可以通过Redis等这类缓存框架进行缓存,还有些数据可以通过服务器本地_jd-hotkey

随便推点

JavaScript 异步编程--async、await实现原理-程序员宅基地

文章浏览阅读663次。JavaScript 异步编程–Generator函数Generator(生成器)是ES6标准引入的新的数据类型,其最大的特点就是可以交出函数的执行的控制权,即:通过yield关键字标明需要暂停的语句,执行时遇到yield语句则返回该语句执行结果,等到调用next函数时(也就是说可以通过控制调用next函数的时机达到控制generator执行的目的)重新回到暂停的地方往下执行,直至genera...

Chevereto配合PicGo打造个人图床_杨浦老苏的博客-程序员宅基地

文章浏览阅读2.3k次,点赞2次,收藏4次。什么是 Chevereto ?Chevereto 是目前最好的图床之一,功能也非常强大。其免费版和收费版的区别,在于收费版多了硬盘扩展,社交分享功能和技术支持。硬盘扩展指的是使用外部存储,例如:Amazon S3、Google Cloud、阿里云 OSS 等。Chevereto 的安装也非常简单,并且支持简体中文。从几天前作者发的公告看,如果没有人接手的话,免费版很可能就要终止了,如果这样的话实在太可惜了安装数据库通过 phpMyAdmin 在 MariaDB 5 中新建用户 chever._chevereto

线性代数【14】线性变换 linear transformation-程序员宅基地

文章浏览阅读1.3k次。前言:上节讨论了,线性变换的基本向量概念,和坐标系构建,以及线性相关的基本定义和原理。现在开始正题,线性变换。1 线性变换在二维空间如果用函数的概念去理解的话,可以把线性变换看成是一个输入输出的函数。那么用【Transformation】而不是function的原因,还是在于向量是一个特点意义的概念,例如,前面我们提到的运动(方向特性)。上面是对一个向量考虑,如果我们考虑一个向量集,那么有应该是整个二维平面的移动,上节说了,为了方便,当考虑向量集的时候,我们只考虑Tip的位置,._linear transformation

Python 操作 MongoDB:增、删、改、查_python 查询mongodb-程序员宅基地

文章浏览阅读2k次,点赞2次,收藏14次。Python 操作 MongoDB:增、删、改、查_python 查询mongodb

window对象和document对象_document对象和window对象-程序员宅基地

文章浏览阅读220次。原文地址 https://blog.csdn.net/zhouziyu2011/article/details/619228891、window:代表浏览器中一个打开的窗口。(1)对象属性① window.self 引用本窗口window==window.self② window.name 为窗口名字③ window.defaultStatus 窗户状态栏信息④ windo..._document对象和window对象

PTA_L1-039 古风排版 (20分)_ptal1-039-程序员宅基地

文章浏览阅读392次,点赞2次,收藏2次。L1-039 古风排版 (20分)中国的古人写文字,是从右向左竖向排版的。本题就请你编写程序,把一段文字按古风排版。输入格式:输入在第一行给出一个正整数N(<100),是每一列的字符数。第二行给出一个长度不超过1000的非空字符串,以回车结束。输出格式:按古风格式排版给定的字符串,每列N个字符(除了最后一列可能不足N个)。输入样例:4This is a test case..._ptal1-039