Torch7提示module 'sample'找不到,修改导入路径仍报错如何解决?
这个问题我之前在Torch7开发时也碰到过,本质就是Lua模块加载路径的问题,咱们一步步来解决:
首先得先明确你的实际目录结构,我分两种最常见的情况给你对应解决方案:
情况1:sample.lua和train.lua在同一根目录下
你最初用require('sample')报错,大概率是因为终端运行脚本时的工作目录不是train.lua所在的根目录,或者Lua的模块查找路径(package.path)里没包含当前脚本所在的目录。
解决方法二选一就行:
- 方法一:先切换到train.lua所在的目录再运行脚本。比如你的train.lua在
~/torch_project/下,终端先执行cd ~/torch_project/,再运行th train.lua。 - 方法二:在train.lua的最开头添加一段代码,手动把当前脚本所在目录加入模块查找路径(推荐,这样不管在哪运行都不会出问题):
-- 获取当前脚本所在的绝对路径 local script_dir = debug.getinfo(1, 'S').source:sub(2):match('(.*/)') or './' -- 将该目录添加到Lua的模块查找路径最前面 package.path = script_dir .. '?.lua;' .. package.path -- 现在再导入sample模块 local sample = require('sample')
情况2:sample.lua在utils文件夹里(目录结构:根目录/train.lua,根目录/utils/sample.lua)
你尝试require('utils.sample')仍报错,是因为Lua默认不会自动递归查找子文件夹,需要调整模块路径或者给utils目录添加初始化文件。
这里有三种可行方案:
- 方案一:修改模块查找路径,让Lua能识别utils目录下的子模块:
local script_dir = debug.getinfo(1, 'S').source:sub(2):match('(.*/)') or './' -- 添加 "根目录/?/?.lua" 这个路径模板,让Lua能找到utils里的sample.lua package.path = script_dir .. '?/?.lua;' .. package.path -- 现在可以正常导入 local sample = require('utils.sample') - 方案二:给utils目录创建
init.lua文件(这是Lua识别目录为模块的标准方式):
在utils/下新建init.lua,内容写:
之后在train.lua里直接用-- utils/init.lua -- 导出sample模块 return require('utils.sample')local sample = require('utils')就能加载到sample模块了。 - 方案三:临时测试用相对路径导入(不推荐长期用,因为脚本移动位置后会失效):
local sample = require('./utils/sample')
额外排查技巧
如果还是找不到,可以在train.lua开头打印当前的模块查找路径,看看有没有包含你的目标文件所在的目录:
print(package.path)
输出里如果没有你需要的路径,按照上面的方法添加就行。
内容的提问来源于stack exchange,提问作者Crista23
相关产品推荐
相关产品推荐

