配置Lua加载路径的首选方法

时间:2015-11-20 05:55:53

标签: lua

所以我从他们的网站上安装了Centos 7软件包档案和Luarocks 2.2.2中的Lua 5.1.4。我尝试通过luarocks install luacurl安装luacurl。它会在/usr/local/lib/lua/5.1/usr/local/lib/luarocks/rocks/usr/local/share/lua/5.1之间拆分文件。我无法弄清楚我应该添加到我的lua包路径中,或者你应该如何配置它。

> lua -e 'print(package.path)'

./?.lua;/usr/share/lua/5.1/?.lua;/usr/share/lua/5.1/?/init.lua;/usr/lib64/lua/5.1/?.lua;/usr/lib64/lua/5.1/?/init.lua

但是当我尝试require("luacurl")时,我收到以下错误消息

stdin:1: module 'luacurl' not found:
    no field package.preload['luacurl']
    no file './luacurl.lua'
    no file '/usr/share/lua/5.1/luacurl.lua'
    no file '/usr/share/lua/5.1/luacurl/init.lua'
    no file '/usr/lib64/lua/5.1/luacurl.lua'
    no file '/usr/lib64/lua/5.1/luacurl/init.lua'
    no file './luacurl.so'
    no file '/usr/lib64/lua/5.1/luacurl.so'
    no file '/usr/lib64/lua/5.1/loadall.so'

是否对lua包装坚持的标准有很好的参考?试图要求我的luacurl.so文件实际所在的位置的绝对路径似乎不起作用。

module '/usr/local/lib/lua/5.1/luacurl.so' not found:
    no field package.preload['/usr/local/lib/lua/5.1/luacurl.so']
    no file './/usr/local/lib/lua/5/1/luacurl/so.lua'
    no file '/usr/share/lua/5.1//usr/local/lib/lua/5/1/luacurl/so.lua'
    no file '/usr/share/lua/5.1//usr/local/lib/lua/5/1/luacurl/so/init.lua'
    no file '/usr/lib64/lua/5.1//usr/local/lib/lua/5/1/luacurl/so.lua'
    no file '/usr/lib64/lua/5.1//usr/local/lib/lua/5/1/luacurl/so/init.lua'
    no file './/usr/local/lib/lua/5/1/luacurl/so.so'
    no file '/usr/lib64/lua/5.1//usr/local/lib/lua/5/1/luacurl/so.so'
    no file '/usr/lib64/lua/5.1/loadall.so'
    no file './/usr/local/lib/lua/5.so'
    no file '/usr/lib64/lua/5.1//usr/local/lib/lua/5.so'
    no file '/usr/lib64/lua/5.1/loadall.so'

require完全有可能在这里使用正确的功能。

2 个答案:

答案 0 :(得分:1)

Lua中有两种类型的require路径:package.path用于纯lua库(.lua),package.cpath用于编译库(.so)。

如果你知道luacurl.so所在的位置($ whereis luacurl.so),那么你可以像这样修改你的cpath:

package.cpath = package.cpath .. ";/usr/local/lib/lua/5.1/?.so"

或放置luacurl.so的地方。只需阅读有关格式的文档(;是分隔符,?是您在需要参数中传递的内容,_转换为/)

答案 1 :(得分:1)

Luarocks会将其自身安装在默认路径中。在要求任何羽绒被之前,请执行以下操作:

require 'luarocks.loader'

这将修改require,以便在安装了Luack的地方也查找并找到Luack。

如果Lua代码应在其他系统上运行,其中某些系统使用luarocks,而其他系统已在默认搜索路径中安装了库,则可能有必要这样做:

pcall( require, 'luarocks.loader' )

这将允许require在未安装羽绒被的情况下自动失败,并仅继续使用require的默认搜索路径。