Lua无法require同目录文件报错Module not found问题求助
问题修复方案
1. 同目录文件require失效的修复
失效原因
你对require的基础逻辑理解是正确的,但是混淆了package.path中./的指向:./对应的是执行lua命令时的终端工作目录,而非当前运行的lua脚本的存储目录。
举个例子:你将main.lua和bar.lua都放在/home/yourname/lua_demo/目录下,但你在/home/yourname/目录下执行lua lua_demo/main.lua,此时./指向的是/home/yourname/,自然找不到同目录下的bar.lua。
修复方法
临时验证方案
执行lua脚本前先cd到脚本所在的目录,再执行运行命令即可:
cd /path/to/your/script/directory lua main.lua
此时./指向脚本存放目录,直接require('bar')就能正常加载。
永久生效方案
不用每次切换目录,在你自己的lua脚本开头添加如下代码,自动将脚本所在目录加入搜索路径:
-- 自动获取当前脚本的存放目录 local script_dir = debug.getinfo(1, "S").source:sub(2):match("(.*/)") or "./" -- 将脚本目录加入package.path最优先位置 package.path = script_dir .. "?.lua;" .. package.path
添加后不管你在哪个工作目录执行该脚本,都能直接require同目录的自定义lua文件。
关于Lua安装的补充说明
你遇到的Virtual packages like 'lua' can't be removed提示是Ubuntu的正常机制:系统默认的lua是虚拟元包,指向具体的版本包,不需要卸载的话可以不用处理。你提到的package.path中默认目录不存在也不影响使用,这些目录是预留给全局第三方Lua库的,你只用自己写的脚本的话完全不需要在意这些目录是否存在。
2. Lua自带默认模块的说明
Lua是有自带标准模块的,分为两类:
- 核心基础模块:
string、table、math、io、os等,默认全局加载,不需要手动require即可直接使用 - 可选标准模块:比如Lua5.2自带的位运算库
bit32,需要手动执行require('bit32')加载,不需要额外安装。
内容的提问来源于stack exchange,提问作者Timothy Salazar
相关产品推荐
相关产品推荐

