【问题标题】:Lua: module 'castl.runtime' not foundLua:找不到模块'castl.runtime'
【发布时间】:2019-06-30 21:53:46
【问题描述】:

我是 Lua 的新手。我使用castl编译了一个JS文件到lua 5.2:

castl -o script.js

这创建了一个名为 script.js.lua 的文件。这是我的新 lua 文件的第一行:

local _ENV = require("castl.runtime");

我尝试使用lua52 script.js.lua 运行该文件,但出现此错误:

C:\Program Files\lua-5.2.4_Win64_bin\lua52.exe: script.js.lua:1: module 'castl.runtime' not found:
        no field package.preload['castl.runtime']
        no file 'C:\Program Files\lua-5.2.4_Win64_bin\lua\castl\runtime.lua'
        no file 'C:\Program Files\lua-5.2.4_Win64_bin\lua\castl\runtime\init.lua'
        no file 'C:\Program Files\lua-5.2.4_Win64_bin\castl\runtime.lua'
        no file 'C:\Program Files\lua-5.2.4_Win64_bin\castl\runtime\init.lua'
        no file '.\castl\runtime.lua'
        no file 'C:\Program Files\lua-5.2.4_Win64_bin\castl\runtime.dll'
        no file 'C:\Program Files\lua-5.2.4_Win64_bin\loadall.dll'
        no file '.\castl\runtime.dll'
        no file 'C:\Program Files\lua-5.2.4_Win64_bin\castl\runtime52.dll'
        no file '.\castl\runtime52.dll'
        no file 'C:\Program Files\lua-5.2.4_Win64_bin\castl.dll'
        no file 'C:\Program Files\lua-5.2.4_Win64_bin\loadall.dll'
        no file '.\castl.dll'
        no file 'C:\Program Files\lua-5.2.4_Win64_bin\castl52.dll'
        no file '.\castl52.dll'
stack traceback:
        [C]: in function 'require'
        script.js.lua:1: in main chunk
        [C]: in ?

我错过了什么?我在 Windows 10 上。

【问题讨论】:

  • 来自文档:一个 Lua 运行时库(位于lua/castl/),它允许执行castl.js 编译的代码。将相同的内容添加到您环境的 LUA_PATH 中,它应该可以工作。

标签: lua dependencies castl


【解决方案1】:

回答你的问题

我错过了什么?

你的问题是你使用了一个函数require,但是你不知道这个函数是做什么的。因此,您无法理解当它未能按照您的预期执行时所引发的错误。

所以先参考Lua手册: https://www.lua.org/manual/5.3/manual.html#pdf-require

你会发现:

require 使用存储在 包路径。如果这也失败了,它会使用 存储在 package.cpath 中的路径。如果这也失败了,它会尝试 多合一加载器(参见 package.searchers)。

https://www.lua.org/manual/5.3/manual.html#pdf-package.path

require 用来搜索 Lua 加载器的路径。

在启动时,Lua 用 环境变量LUA_PATH_5_3 或环境变量LUA_PATH 或者使用 luaconf.h 中定义的默认路径,如果这些环境 变量未定义。环境值中的任意;; 变量被默认路径替换。

补充阅读: https://www.lua.org/pil/8.1.html

在任何网络搜索中输入“Lua require”也会为您的问题提供大量解决方案。

正如 hjpotter92 在他的评论中已经说明的那样,您必须告诉您的计算机在哪里查找您想要的文件,除非它们已经位于默认文件夹中。 将文件的位置添加到您的 LUA_PATH 环境变量中,或者在调用相应的 require 之前将其添加到 package.path 字符串中。

【讨论】:

  • 我可能只是没有正确理解您的说明,但我尝试在名为LUA_PATH 的环境变量对话框中添加一个新的用户变量设置为%USERPROFILE%\Desktop\repos\clones\castl\lua\castl。在此之后,我得到了同样的错误,除了错误只列出了 .dll 文件的“无文件”条目(不再有 .lua 文件)。
  • 因此,注意到没有该环境变量 Lua 正在 C:\Program Files\ua-5.2.4_Win64_bin\lua\castl\ 中搜索 runtime.lua 文件,我将我 castl 存储库中的 lua 文件夹复制到该位置 (C:\Program Files\lua-5.2.4_Win64_bin\)。这似乎已将我从这个错误转移到另一个......
  • 很抱歉,“在任何网络搜索中输入“Lua 要求””并不是在 Stackoverflow 上回答问题的好建议 - 这里的答案在某种程度上应该是自给自足的。
  • @shabunc 我的回答是自给自足的。你显然没有读过它。我详细解释了导致他的问题的原因以及他如何解决它。我什至列举了几个参考文献。我什至解释了如何在不被 StackOverflow 灌输的情况下获取这些信息。
【解决方案2】:

我会在这里留下一个答案,因为我相信提供的答案实际上对那些对 Lua 生态系统一无所知的人没有帮助。

为了解决require("castl.runtime")需要设置LUA_PATH,在这种情况下,为了简单起见我们假设castl distrib位于/Users/me/castl,那么你可以:

export LUA_PATH="/Users/me/castl/lua/?.lua"

现在,如果您运行 Lua 脚本,它将正确执行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-26
    • 2020-09-28
    • 1970-01-01
    • 2017-09-06
    • 2014-10-25
    • 2013-08-10
    • 1970-01-01
    • 2022-12-15
    相关资源
    最近更新 更多