You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Lua 5.4默认无法从当前目录加载模块?

Lua 5.4默认无法从当前目录加载模块的原因

核心原因:跨版本的安全变更,并非5.4独有

Lua从5.2版本开始,就默认从package.path中移除了当前目录(.)的配置,这是官方为避免恶意脚本加载当前目录下的同名恶意模块(比如伪装成标准库的恶意脚本)而做的安全调整,5.4只是延续了这个规则。

为什么旧Stack Overflow答案说默认支持?

那些提及“默认支持当前目录加载”的问答,几乎都是针对Lua 5.1及更早版本的——5.1及之前的默认package.path确实包含当前目录,这也是很多旧资料的认知来源。

Windows下的特殊表现

Windows系统的命令行环境没有Unix类系统那种“当前目录优先级”的隐含规则,因此这个变更的影响更直接:直接调用require("hello")时,Lua会完全按照默认的package.path查找,不会自动搜索当前目录,因此报错找不到模块。

验证方式

你可以在Lua交互模式下输入以下命令查看默认路径:

print(package.path)

输出里不会包含./?.lua或类似当前目录的规则,而你自定义的requireLocal函数本质就是给package.path追加了当前目录的查找规则,所以能成功加载。

常用解决方案

除了自定义加载函数,还有几种常规方式:

  • 在脚本开头临时修改路径:
    package.path = package.path .. ";./?.lua"
    
  • 设置系统环境变量LUA_PATH,添加./?.lua(Windows下注意用分号分隔路径)
  • 命令行启动时指定路径:
    lua -e "package.path='./?.lua;'..package.path" use_hello.lua
    

内容的提问来源于stack exchange,提问作者Sebastien Diot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 14:22:05