已通过Luarocks安装luaossl与http模块,Lua环境中require失败求助
问题描述
已通过Luarocks成功安装luaossl和http模块,但在Lua命令行执行require("luaossl")与require("http")均失败,执行eval "$(luarocks path)"也无法解决问题。安装日志显示模块已安装在/usr目录,但Lua搜索路径中未包含对应位置,报错提示找不到模块文件。
具体操作及报错信息:
# luarocks install http Warning: falling back to curl - install luasec to get native HTTPS support Installing https://luarocks.org/http-0.4-0.all.rock http 0.4-0 depends on lua >= 5.1 (5.3-1 provided by VM) http 0.4-0 depends on compat53 >= 0.3 (0.14.3-1 installed) http 0.4-0 depends on bit32 (5.3.5.1-1 installed) http 0.4-0 depends on cqueues >= 20161214 (20200726.53-0 installed) http 0.4-0 depends on luaossl >= 20161208 (20220711-0 installed) http 0.4-0 depends on basexx >= 0.2.0 (0.4.1-1 installed) http 0.4-0 depends on lpeg (1.1.0-1 installed) http 0.4-0 depends on lpeg_patterns >= 0.5 (0.5-0 installed) http 0.4-0 depends on binaryheap >= 0.3 (0.4-1 installed) http 0.4-0 depends on fifo (0.2-0 installed) http 0.4-0 is now installed in /usr (license: MIT) [root@ip-146-69-43-165 ~]# lua Lua 5.3.4 Copyright (C) 1994-2017 Lua.org, PUC-Rio > luaossl = require("luaossl") stdin:1: module 'luaossl' not found: no field package.preload['luaossl'] no file '/usr/share/lua/5.3/luaossl.lua' no file '/usr/share/lua/5.3/luaossl/init.lua' no file '/usr/lib64/lua/5.3/luaossl.lua' no file '/usr/lib64/lua/5.3/luaossl/init.lua' no file './luaossl.lua' no file './luaossl/init.lua' no file '/usr/lib64/lua/5.3/luaossl.so' no file '/usr/lib64/lua/5.3/loadall.so' no file './luaossl.so' stack traceback: [C]: in function 'require' stdin:1: in main chunk [C]: in ? > require("http") stdin:1: module 'http' not found: no field package.preload['http'] no file '/usr/share/lua/5.3/http.lua' no file '/usr/share/lua/5.3/http/init.lua' no file '/usr/lib64/lua/5.3/http.lua' no file '/usr/lib64/lua/5.3/http/init.lua' no file './http.lua' no file './http/init.lua' no file '/usr/lib64/lua/5.3/http.so' no file '/usr/lib64/lua/5.3/loadall.so' no file './http.so' stack traceback: [C]: in function 'require' stdin:1: in main chunk [C]: in ? >
预期结果:luaossl和http模块能成功加载。
解决方案
1. 确认模块实际安装路径
先通过Luarocks查看模块的具体安装位置:
luarocks show luaossl luarocks show http
查看输出中的Installed in:和Modules:字段,比如luaossl的.so文件可能在/usr/lib/lua/5.3/,http的init.lua可能在/usr/share/lua/5.3/http/。
2. 临时添加Lua搜索路径测试
在Lua命令行中手动添加缺失的路径,验证是否能加载模块:
-- 添加Lua脚本路径(针对http等纯Lua模块) package.path = package.path .. ";/usr/share/lua/5.3/?.lua;/usr/share/lua/5.3/?/init.lua" -- 添加C扩展模块路径(针对luaossl等编译模块) package.cpath = package.cpath .. ";/usr/lib/lua/5.3/?.so" -- 再次尝试加载模块 local luaossl = require("luaossl") local http = require("http")
如果加载成功,说明问题确实是Lua搜索路径未包含Luarocks的安装目录。
3. 永久配置Luarocks路径
将Luarocks的路径配置写入shell的初始化文件,确保每次登录都生效:
# 写入当前用户的bash配置 echo 'eval "$(luarocks path)"' >> ~/.bashrc # 立即生效配置 source ~/.bashrc
如果是root用户,也可以写入/etc/profile让所有用户生效:
echo 'eval "$(luarocks path)"' >> /etc/profile source /etc/profile
之后重新启动Lua命令行,尝试加载模块。
4. 检查Lua与Luarocks版本匹配
确保Luarocks使用的Lua版本与当前运行的Lua版本一致:
# 查看当前Lua版本 lua -v # 查看Luarocks默认使用的Lua版本 luarocks --version
如果版本不匹配,指定对应Lua版本重新安装模块:
luarocks --lua-version 5.3 install luaossl http
5. 验证安装文件存在性
检查模块文件是否真的存在于Luarocks报告的路径:
# 检查luaossl的C扩展文件 ls /usr/lib/lua/5.3/luaossl.so # 检查http的初始化脚本 ls /usr/share/lua/5.3/http/init.lua
如果文件不存在,说明安装过程有问题,重新执行安装命令并检查报错信息。
内容的提问来源于stack exchange,提问作者Sudhir
相关产品推荐
相关产品推荐

