如何使用Luarocks将模块安装到Luajit
我设法使用lua5.3安装了luasocket,并且正常工作,但我找不到安装它们以从luajit中require的方法。
如果我编写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 -- 版权所有(C)2005-2017 Mike Pall.http://luajit.org/
JIT: 在ARMv7 VFPv3上折叠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]:在函数'require'中
stdin:1:在主要块中
[C]:在0xaba4406d处
我试图将安装的文件移动到其中一些路径,但仍然不起作用。
socket.lua被安装到您的LUA_PATH中不存在的目录中
使用find或mlocate找到socket.lua的安装位置(如果已安装):
find / -name socket.lua 2>&1 | grep -v Perm
sudo updatedb && locate socket.lua
~/.luaver/luarocks/3.2.0_5.1/share/lua/5.1/socket.lua
~/.luaver/luarocks/3.2.0_5.3/share/lua/5.3/socket.lua
/usr/share/lua/5.1/socket.lua
/usr/share/lua/5.2/socket.lua
/usr/share/lua/5.3/socket.lua
编辑你的.bashrc——假设你使用的是bash shell,但是其他的shell也可以按照类似的方法操作。找到这一行export LUA_PATH='/usr/local/share/lua/5.1/?.lua;yadda-yadda'并添加一个分号加上你从以上路径找到的路径。
export LUA_PATH='/usr/local/share/lua/5.1/?.lua;/usr/share/lua/5.1'
关闭所有打开的终端,然后打开一个新的终端,现在你已经启用了这个新路径。
或者,你可以使用软链接。
ln -s /usr/share/lua/5.1/socket.lua /usr/local/share/lua/5.1/socket.lua
我不是这种次要软链接方法的粉丝,因为你必须为每个在路径之外的Lua模块这样做,但我包括它是让你知道你的选择。如果只是为了那个特定的模块,这将是一个可接受的解决方案,因为它做到了你想做的事情。然而,在将来当你遇到其他模块的相同问题时,你将不得不重复这个过程。修改LUA_PATH是你最好的选择。
这是事实,你说:
"我添加路径并得到:/data/data/com.termux/files/home/.luarocks/share/lua/5.1/socket.lua模块'socket.core'未找到..."
那是因为socket.lua存在于该目录中,但你移动了它的子目录:
/data/data/com.termux/files/home/.luarocks/share/lua/5.1/socket/core.lua
所以该目录将不再对你有任何作用,直到你_删除它并重新开始。_
rm /data/data/com.termux/files/home/.luarocks/share/lua/5.1/socket.lua
rm -rf /data/data/com.termux/files/home/.luarocks/share/lua/5.1/socket/
luarocks --lua-version 5.1 install luasocket
现在仔细观察它的安装,看看它实际安装到哪个目录中,
或使用之前提到的find命令来查找与Lua5.1兼容的socket位置并将其添加到您的LUA_PATH中。
sudo apt install mlocate && sudo updatedb && locate socket.lua
您不需要将这些目录添加到LUA_PATH中,因为它们已经在搜索中
> 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'
;;不起作用,因为你已经指出它不驻留在任何这些默认目录中。
很可能它正在寻找正确的目录,但是错误的扩展名。
/usr/local/lib/lua/5.1/socket. so
相对于 /usr/local/lib/lua/5.1/socket. lua
在这种情况下,使用我之前提到的软链接方法,确保使用正确的位置,这只是一个例子:
ln -s /usr/local/lib/lua/5.1/socket.lua /usr/local/lib/lua/5.1/socket.so
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

下面是安装
luasocket的正确方式:luarocks --lua-version 5.1 install luasocket然后你可以查看输出的最后一行以确定模块的安装位置,以便检查是否在
package.path中。看起来您误解了
package.path的工作方式。来自手册:这意味着像
/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。