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) .
正如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)您必须在最新版本中提及 lua 版本和 lua 目录:
luarocks --lua-dir=$(brew --prefix)/opt/lua@5.1 --lua-version=5.1 install lua-cassandra
Run Code Online (Sandbox Code Playgroud)