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

时间:2013-12-02 05:39:16

标签: 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 ......

6 个答案:

答案 0 :(得分:22)

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

答案 1 :(得分:7)

正如moteus所说,我决定为Lua 5.1安装第二版Luarocks。但是他正在使用Windows而我正在使用Linux,所以这就是我所做的:

  • Luarocks website

  • 下载最新版Luarocks的来源
  • 从源目录运行./configure脚本:

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

    前缀设置告诉Luarocks将其内容放在.luarocks51文件夹中,位于我安装的Luarocks 5.2的现有.luarocks文件夹旁边。 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参数指定它。

  • 使用make

  • 编译Luarocks
  • 使用make isntall安装它(因为我将它安装在本地目录中,所以不需要Sudo。)

  • Configure my 5.1 environment使用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。

  • 5.1版luarocks的可执行文件名为luarocks-5.1

    luarocks-5.1 install lfs
    

答案 2 :(得分:5)

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

答案 3 :(得分:1)

我遇到了同样的问题。并且想要更自动的东西,我会重复使用。

我非常习惯Ruby RVM。所以我想从中获得灵感。 我只需要3个快速bash功能来满足我的需求。随意使用它们,但它们仅在ArchLinux上进行测试

https://github.com/mathieujobin/lua_version_manager

答案 4 :(得分:1)

使用自制软件,您可以:

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

答案 5 :(得分:0)

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

luarocks --lua-dir=$(brew --prefix)/opt/lua@5.1 --lua-version=5.1 install lua-cassandra