21

我正在编写一个小型 Lua 项目并使用 Luarocks 安装我的第 3 方依赖项。我机器上的默认 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...

4

4 回答 4

26

根据您对 的引用~/.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) .

于 2013-12-03T18:41:32.157 回答
8

根据 moteus 的建议,我决定为 Lua 5.1 安装第二个版本的 Luarocks。但他使用的是 Windows,而我使用的是 Linux,所以这就是我所做的:

  • 在Luarocks 网站上下载最新版 Luarocks 的源代码

  • 从源目录,运行./configure脚本:

    /configure --prefix="${HOME}/.luarocks51" --lua-suffix=5.1

    前缀设置告诉 Luarocks 将其内容放在.luarocks51文件夹中,紧挨着我 5.2 安装的 Luarocks 中的现有.luarocks文件夹。lua-suffix 参数告诉 Luarocks 使用 Lua 5.1 而不是我机器中的默认 lua 版本(5.2)。这取决于我将 Lua 5.1 的解释器命名为lua5.1(Debian installed mine on /usr/bin/lua5.1)。最后,Luarocks 设法自动检测 5.1 头文件和库的安装位置(/usr/include/lua5.1/),但如果没有,我想我可以用--with-lua-includeand--with-lua-lib参数指定它。

  • 编译 Luarocksmake

  • 安装它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
    
于 2013-12-02T18:18:31.477 回答
3

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

luarocks --lua-dir=$(brew --prefix)/opt/lua@5.1 --lua-version=5.1 install lua-cassandra
于 2019-09-12T14:25:43.533 回答
2

使用自制软件,您可以:

brew install lua51  # Lua 5.1
brew install lua    # Lua latest

Luarocks 带有 Lua,所以你可以这样做:

# Install Lua 5.1 version of any package
luarocks-5.1 install moonscript

# Install Lua latest version of any package
luarocks install moonscript
于 2018-02-10T18:05:44.687 回答