我正在编写一个小型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 ......
答案 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,所以这就是我所做的:
从源目录运行./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
使用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上进行测试
答案 4 :(得分:1)
使用自制软件,您可以:
brew install lua51 # Lua 5.1
brew install lua # Lua latest
# 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