我正在编写一个小的Lua项目并使用Luarocks来安装我的第三方依赖项.我机器上的默认Lua版本是5.2,到目前为止一切正常.
但是,今天我偶然发现了一个令我困惑的问题.我想在Lua 5.1和Luajit上运行我的程序,看看它是否也适用于那些版本,但我很难让Luarocks下载相应版本的依赖项.作为最后的手段,我试图告诉Lua5.1使用Luarocks安装的5.2库(通过将LUA_PATH
环境变量设置为相同的值LUA_PATH_5_2
)但不幸的是这还不够:我的项目依赖于LuaFileSystem,一个C-基于模块,所以我需要为5.1和5.2安装单独的版本.
如何安装依赖项的5.1和5.2版本,我该怎么办?我是否需要将一些参数传递给luarocks install
命令?我是否需要在我的机器上安装多个Luarocks实例?令我困惑的一件事是.luarocks
文件夹里面的东西被分类在5.2子文件夹下(〜/ .luarocks/share/lua/5.2 /),这表明可能有办法在兄弟5.1
文件夹中安装东西但是在同时只有一个bin
文件夹,这表明luarocks一次只能处理一个版本的Lua ...
根据您的参考~/.luarocks/share/lua/5.2/
,您似乎正在运行Unix系统(Linux或Mac).您可以为Lua 5.1和Lua 5.2安装最新版本的LuaRocks两次,如下所示:
./configure --lua-version=5.1 --versioned-rocks-dir make build sudo make install
再次为5.2:
./configure --lua-version=5.2 --versioned-rocks-dir make build sudo make install
这会让你/usr/local/bin/luarocks-5.1
和/usr/local/bin/luarocks-5.2
.如果您在/ usr/local /中安装了Lua 5.1和5.2,并且每个人都将使用自己~/.luarocks/lib/luarocks/rocks-5.x/
的用户树条目(以及/usr/local/lib/luarocks/rocks-5.x
系统树),并将模块安装到正确的位置/usr/share/lua/5.x/
和 ~/.luarocks/share/lua/5.x/
(同样适用于lib
) .
正如moteus所说,我决定为Lua 5.1安装第二版Luarocks.但他正在使用Windows而我正在使用Linux,所以这就是我所做的:
在Luarocks网站上下载最新版Luarocks的源代码
从源目录中运行./configure
脚本:
/configure --prefix="${HOME}/.luarocks51" --lua-suffix=5.1
前缀设置告诉Luarocks将其东西放在.luarocks51
文件夹中,.luarocks
在我安装的Luarocks 5.2 的现有文件夹旁边.lua-suffix参数告诉Luarocks在我的机器(5.2)中使用Lua 5.1而不是默认的lua版本.这取决于我为Lua 5.1命名解释器lua5.1
(Debian安装了我的/usr/bin/lua5.1
).最后,Luarocks成功地自动检测了5.1头文件和库的安装位置(/usr/include/lua5.1/
)但如果没有,我想我可以使用--with-lua-include
和--with-lua-lib
参数指定它.
编译Luarocks与 make
安装它make isntall
(因为我在本地目录中安装它所以不需要Sudo).
配置我的5.1环境以使用Luarocks下载的库.我在.bashrc中添加了以下内容:
export PATH=$PATH:~/.luarocks/bin:~/.luarocks51/bin export LUA_CPATH=";;${HOME}/.luarocks51/lib/lua/5.1/?.so" export LUA_PATH=";;${HOME}/.luarocks51/share/lua/5.1/?.lua;${HOME}/.luarocks51/share/lua/5.1/?/init.lua" export LUA_CPATH_5_2=";;${HOME}/.luarocks/lib/lua/5.2/?.so" export LUA_PATH_5_2=";;${HOME}/.luarocks/share/lua/5.2/?.lua;${HOME}/.luarocks/share/lua/5.2/?/init.lua"
5.1配置也适用于Luajit.
Luarocks 5.1版本的可执行文件命名为luarocks-5.1
:
luarocks-5.1 install lfs
这就是我这样做的方式. https://gist.github.com/moteus/6823437 我的英语不是很好.但我认为这可能有用.