gpt4 book ai didi

lua - 是否可以根据我的 Lua 脚本的位置而不是当前目录进行导入?

转载 作者:行者123 更新时间:2023-12-04 18:15:57 25 4
gpt4 key购买 nike

如果我有两个在同一目录中相互引用的脚本

A/
foo.lua
bar.lua

foo.lua
require "bar"

酒吧.lua
print "It worked"

然后从同一文件夹运行 lua 可执行文件
cd A; lua foo.lua

但从另一个文件夹运行解释器失败,并显示“未找到模块 'bar'”消息
cd A/..; lua A/foo.lua

有没有办法让我的相对导入不依赖于当前的工作目录?例如,在批处理文件中,我可以将我的路径设置为相对于 dirname $0 .

最佳答案

主要问题是 package.path不考虑运行脚本所在的目录。虽然 Doug 的解决方案有效,但如果您必须继续添加,这可能会变得乏味

package.path = 'foobar_path/?.lua;'..package.path

到您计划从不同工作目录运行的脚本。您可以做的更简单的事情是创建一个模块,该模块会自动将运行脚本的目录添加到 package.path。当你需要它时。该模块将驻留在 package.path 中列出的默认位置之一。所以可以找到。
-- moduleroot.lua
local moduleroot = arg and arg[0]
if moduleroot then
local path = moduleroot:match [[^(.+[\/])[^\/]+$]]
if path and #path > 0 then
package.path = path..'?.lua;'..package.path
package.cpath = path..'?.dll;'..package.cpath
return path
end
end
-- foo.lua
require "moduleroot"
require "bar"

事实上,这是一个很常见的问题, Penlight 包括处理此问题的便利设施: pl.app.require_here .

关于lua - 是否可以根据我的 Lua 脚本的位置而不是当前目录进行导入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11714204/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com