LuaJit找不到通过luarocks安装的库“lua-vips”

我有这个Lua文件:

-- test1.lua

--require "luarocks.loader"
vips = require "vips"
--vips = require "lua-vips"

local img = vips.Image.new_from_file("img1.jpg")
-- [...................]

它无法找到通过“luarocks”安装的库“lua-vips”:

$ luajit test1.lua
luajit: error loading module 'vips' from file '/usr/local/lib/luarocks/rocks-5.3/':
  cannot read /usr/local/lib/luarocks/rocks-5.3/: Is a directory
stack traceback:
  [C]: at 0x0102caa660
  [C]: in function 'require'
  test1.lua:2: in main chunk
  [C]: at 0x0102c3b8a0

即使我将

export LUA_PATH="/usr/local/lib/luarocks/rocks-5.3/"

添加到~/.profile中,它也不会起作用。

目录luarocks的内容--lua-vips存在:

  ls /usr/local/lib/luarocks/rocks-5.3/

  lua-vips  manifest

如何修复这个问题?

$ luarocks path
export LUA_PATH='/Users/my_user/.luarocks/share/lua/5.3/?.lua;/Users/my_user/.luarocks/share/lua/5.3/?/init.lua;/usr/local/share/lua/5.3/?.lua;/usr/local/share/lua/5.3/?/init.lua;/usr/local/Cellar/luarocks/3.0.1/share/lua/5.3/?.lua;/usr/local/lib/lua/5.3/?.lua;/usr/local/lib/lua/5.3/?/init.lua;./?.lua;./?/init.lua'
export LUA_CPATH='/Users/my_user/.luarocks/lib/lua/5.3/?.so;/usr/local/lib/lua/5.3/?.so;/usr/local/lib/lua/5.3/loadall.so;./?.so'
export PATH='/Users/my_user/.luarocks/bin:/usr/local/bin:/Users/my_user/.yarn/bin:/Users/my_user/.config/yarn/global/node_modules/.bin:/Users/my_user/.nix-profile/bin:/Users/my_user/.nvm/versions/node/v8.14.0/bin:/Users/my_user/.cargo/bin:/Users/my_user/.gem/ruby/2.5.1/bin:/Users/my_user/.rubies/ruby-2.5.1/lib/ruby/gems/2.5.0/bin:/Users/my_user/.rubies/ruby-2.5.1/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/my_user/go/bin'
点赞
用户4984564
用户4984564

你的问题是 LUA_PATH 不像 PATH 一般有效。

你需要提供一个模板字符串,其中 ? 代表要加载的库的名称,而不是一个目录。

例如,如果你想在 /path/to/libs/ 目录下查找文件,你需要将 "/path/to/libs/?.lua;/path/to/libs/?/init.lua" 加入到路径中。

如果你直接添加 "/usr/local/lib/luarocks/rocks-5.3/", Lua 会尝试将该目录作为 Lua 文件来加载,这会导致错误。

将该环境变量移除并告诉我们你得到了什么错误。

还要记得,添加到 .profile 需要注销并重新登录才能生效(或在每个新开启的 shell 中运行 source ~/.profile)。

2019-06-24 09:31:11