Lua中如何相对于导入文件所在目录导入其他文件?
Lua 同目录文件跨路径导入解决方案
要实现不受执行目录影响的同目录模块导入,最简洁的标准实现方式是动态将当前脚本所在目录加入Lua的模块搜索路径:
在test.lua开头添加以下代码:
-- 获取当前脚本的绝对路径并提取目录部分 local script_path = debug.getinfo(1, "S").source:sub(2) local script_dir = script_path:match("(.*/)") or "./" -- 将当前脚本目录添加到模块搜索路径最前端 package.path = script_dir .. "?.lua;" .. package.path
之后保持原有的导入逻辑即可:
require("main") print(doSomething())
原理说明
debug.getinfo(1, "S").source能获取当前执行脚本的路径,sub(2)用于去掉路径开头的@符号(Windows环境下脚本路径会带这个前缀)。- 通过
match("(.*/)")提取脚本所在的目录路径,若脚本在当前目录则默认使用./。 - 修改
package.path让Lua优先从当前脚本所在目录查找.lua模块,彻底解决因工作目录不同导致的模块查找错误。
内容的提问来源于stack exchange,提问作者grottenolm
相关产品推荐
相关产品推荐

