如何使用Luarocks为Lua5.2和5.1安装库?

hug*_*omg 14 lua luajit luarocks

我正在编写一个小的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 ...

His*_*H M 23

根据您的参考~/.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
Run Code Online (Sandbox Code Playgroud)

再次为5.2:

./configure --lua-version=5.2 --versioned-rocks-dir
make build
sudo make install
Run Code Online (Sandbox Code Playgroud)

这会让你/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) .

  • 当我运行`configure for` 5.1时,我收到以下错误:`检测到Lua版本:5.2这与--with-lua-version的值发生冲突.我设法通过传递一个额外的`--lua-suffix = 5.1`参数来解决它.然而,这是其他所有人必须要做的事情,还是仅仅是我? (2认同)

hug*_*omg 7

正如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"
    
    Run Code Online (Sandbox Code Playgroud)

    5.1配置也适用于Luajit.

  • Luarocks 5.1版本的可执行文件命名为luarocks-5.1:

    luarocks-5.1 install lfs
    
    Run Code Online (Sandbox Code Playgroud)


mot*_*eus 5

这就是我这样做的方式. https://gist.github.com/moteus/6823437 我的英语不是很好.但我认为这可能有用.


Kam*_*yar 5

您必须在最新版本中提及 lua 版本和 lua 目录:

luarocks --lua-dir=$(brew --prefix)/opt/lua@5.1 --lua-version=5.1 install lua-cassandra
Run Code Online (Sandbox Code Playgroud)