lua - 如何使用 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
我尝试将已安装的文件移动到其中一些路径,但仍然无法正常工作。
解决方案
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
.
推荐阅读
- r - R Tidy 解决方案根据列的数据可用性从 group_by 输出中进行选择
- django - 如何使用 Django Python 中的数据表从外部数据库(Oracle)呈现数据?
- java - 与secureimap.t-online.de 的JavaMail 连接被拒绝
- java - 是否可以将字符串 / int 声明为数字?
- angular - Angular:为什么复选框的(更改)事件仅在双击后触发?
- parallel-processing - OpenCL,向量类型的问题:叉积没有像我预期的那样工作
- javascript - NodeJs - 使用另一个 API 调用 API Url Link
- json - 如何在不硬编码 bid_price 变量的情况下创建使用 Spot 实例的 EMR 集群资源?
- php - 阻止除一个目录中的 php 文件
- jquery - 滚动跟随到某个点