首页 > 解决方案 > 如何使用 Luarocks 将模块安装到 Luajit

问题描述

我设法安装了 luasocket 并使用 lua5.3 工作正常,但我找不到从 luajit 安装它们的方法。

如果我写 print(_VERSION) 它显示 luajit 使用 lua5.1。

这是我一直在尝试的东西:

luarocks install luasocket

luarocks --local install luasocket

luarocks --lua-version 5.1 install luasocket

luarocks --lua-version 5.1 --local install luasocket

luarocks config lua_version 5.1

luarocks install luasocket

sock = require("/data/data/com.termux/files/home/.luarocks/lib/luarocks/rocks-5.1/socket")

package.path = package.path .. ";/data/data/com.termux/files/home/.luarocks/lib/luarocks/rocks-5.1" require "socket"

package.path = package.path .. ";/data/data/com.termux/files/home/.luarocks/lib/lua/5.1" require "socket"

...

错误:

$ luajit
LuaJIT 2.1.0-beta3 -- Copyright (C) 2005-2017 Mike Pall. http://luajit.org/
JIT: ON ARMv7 VFPv3 fold cse dce fwd dse narrow loop abc sink fuse
> sock = require("socket")
stdin:1: module 'socket' not found:
        no field package.preload['socket']
        no file './socket.lua'
        no file '/data/data/com.termux/files/usr/share/luajit-2.1.0-beta3/socket.lua'
        no file '/usr/local/share/lua/5.1/socket.lua'
        no file '/usr/local/share/lua/5.1/socket/init.lua'
        no file '/data/data/com.termux/files/usr/share/lua/5.1/socket.lua'
        no file '/data/data/com.termux/files/usr/share/lua/5.1/socket/init.lua'
        no file './socket.so'
        no file '/usr/local/lib/lua/5.1/socket.so'
        no file '/data/data/com.termux/files/usr/lib/lua/5.1/socket.so'
        no file '/usr/local/lib/lua/5.1/loadall.so'
stack traceback:
        [C]: in function 'require'
        stdin:1: in main chunk
        [C]: at 0xaba4406d

我尝试将已安装的文件移动到其中一些路径,但仍然无法正常工作。

标签: lualuajitluarocksluasocket

解决方案


luarocks --lua-version 5.1 install luasocket

是安装它的正确方法。

这也应该在输出的最后一行告诉你它安装模块的位置,所以你可以检查它是否在你的package.path.


看来您只是误解了它的package.path工作原理。从手册

路径是包含以分号分隔的模板序列的字符串。对于每个模板,该函数将模板中的每个询问标记(如果有)替换为 name 的副本,其中所有出现的 sep(默认为点)都替换为 rep(默认为系统的目录分隔符),然后尝试打开生成的文件名。

这意味着类似的路径/usr/share/lua/5.1不会找到任何东西,因为它在该路径中找不到有效的 Lua 文件,并且由于没有?,因此不会进行任何替换。两个路径中的第一个是可以的,但是许多 Lua 模块使用一个名为的文件init.lua,所以对于每个<path>/?.lua你应该总是添加一个<path>/?/init.lua来覆盖该选项。

通常Luarocks 应该将包的主要 Lua 文件安装在/usr/local/share/lua/5.1/socket.lua,但对于您的情况,这似乎不起作用。您可以查看该目录并查看该文件是否存在,并检查是否luarocks config deploy_lua_dir实际返回/usr/local/share/lua/5.1.


推荐阅读