如何正确使用luaenv和luarocks

我使用anyenv来安装所有脚本语言的版本。目前正在使用plenv安装Perl,ndenv安装Node.js,pyenv安装Python,并刚安装了 luaenv。非常好,因为不会污染系统目录-所有内容都安装在用户定义的目录中。

luaenv已经安装完成,我可以:

$ luaenv install 5.1.5   #已安装
$ luaenv global 5.1.5    #OK
$ luaenv which lua
/opt/anyenv/envs/luaenv/versions/5.1.5/bin/lua
$ luaenv versions
* 5.1.5 (set by /opt/anyenv/envs/luaenv/version)
$ lua -v
Lua 5.1.5  Copyright (C) 1994-2012 Lua.org, PUC-Rio

看起来一切都很正常。

当然也要安装luarocks。不幸的是,luaenv本身不支持luarocks的安装(例如缺少像perl那样的plenv install-cpanm),因此尝试按照快速入门指南进行操作:

  • 下载源码
  • ./configure
  • make build

配置失败,错误信息提到缺少lua.h

Checking Lua includes...
lua.h not found (looked in /opt/anyenv/envs/luaenv/include, /opt/anyenv/envs/luaenv/include/lua/5.1, /opt/anyenv/envs/luaenv/include/lua5.1)
You may want to use the flag --with-lua or --with-lua-include. See --help.

因此,第一个错误:luaenv没有设置正确的路径。:( 在之后:

$ find /opt/anyenv/envs/luaenv -name lua.h -print
/opt/anyenv/envs/luaenv/versions/5.1.5/include/lua.h

再次尝试:

$ ./configure --with-lua=/opt/anyenv/envs/luaenv/versions/5.1.5

现在成功了,接着执行make build

检查构建的结果,在src/luarocks/site_config.lua中:

local site_config = {}
site_config.LUAROCKS_PREFIX=[[/usr/local]]
site_config.LUA_INCDIR=[[/opt/anyenv/envs/luaenv/versions/5.1.5/include]]
site_config.LUA_LIBDIR=[[/opt/anyenv/envs/luaenv/versions/5.1.5/lib]]
site_config.LUA_BINDIR=[[/opt/anyenv/envs/luaenv/versions/5.1.5/bin]]
site_config.LUAROCKS_SYSCONFDIR=[[/usr/local/etc/luarocks]]
site_config.LUAROCKS_ROCKS_TREE=[[/usr/local]]
site_config.LUAROCKS_ROCKS_SUBDIR=[[/lib/luarocks/rocks]]
site_config.LUA_DIR_SET=true
site_config.LUAROCKS_UNAME_S=[[Darwin]]
site_config.LUAROCKS_UNAME_M=[[x86_64]]
site_config.LUAROCKS_DOWNLOADER=[[curl]]
site_config.LUAROCKS_MD5CHECKER=[[md5sum]]
return site_config

显然是错误的。路径不应该指向/usr/local,应该指向由luaenv管理的版本化目录中的某个地方。

我是一个lua初学者。试图学习它。但我甚至无法设置基本的环境。:(在Google了一个小时之后放弃了,请问:

如何配置和安装luarocks,以便与由luaenv安装的lua版本正确运行?

点赞