локальная установка пакета luarocks (luarepl) не работает

Я новичок в luarocks и только что попытался установить luarepl. Установка вроде бы прошла нормально:

$ luarocks install luarepl
Installing https://luarocks.org/luarepl-0.8-1.rockspec...
Using https://luarocks.org/luarepl-0.8-1.rockspec... switching to 'build' mode
Updating manifest for /Users/me/.luarocks/lib/luarocks/rocks-5.1
luarepl 0.8-1 is now built and installed in /Users/me/.luarocks (license: MIT/X11)

но если я пытаюсь запустить исполняемый файл, кажется, что установка прервана:

$ ~/.luarocks/bin/rep.lua
/usr/local/bin/lua5.1: ...cks/lib/luarocks/rocks-5.1/luarepl/0.8-1/bin/rep.lua:23: module 'repl.console' not found:
    no field package.preload['repl.console']
    no file './repl/console.lua'
    no file '/usr/local/share/lua/5.1/repl/console.lua'
    no file '/usr/local/share/lua/5.1/repl/console/init.lua'
    no file '/usr/local/lib/lua/5.1/repl/console.lua'
    no file '/usr/local/lib/lua/5.1/repl/console/init.lua'
    no file './repl/console.so'
    no file '/usr/local/lib/lua/5.1/repl/console.so'
    no file '/usr/local/lib/lua/5.1/loadall.so'
    no file './repl.so'
    no file '/usr/local/lib/lua/5.1/repl.so'
    no file '/usr/local/lib/lua/5.1/loadall.so'
stack traceback:
    [C]: in function 'require'
    ...cks/lib/luarocks/rocks-5.1/luarepl/0.8-1/bin/rep.lua:23: in main chunk
    [C]: ?

Я смотрю в директорию ~/.luarocks:

$ cd ~ ; find .luarocks
.luarocks
.luarocks/bin
.luarocks/bin/rep.lua
.luarocks/config.lua
.luarocks/lib
.luarocks/lib/luarocks
.luarocks/lib/luarocks/rocks-5.1
.luarocks/lib/luarocks/rocks-5.1/luarepl
.luarocks/lib/luarocks/rocks-5.1/luarepl/0.8-1
.luarocks/lib/luarocks/rocks-5.1/luarepl/0.8-1/bin
.luarocks/lib/luarocks/rocks-5.1/luarepl/0.8-1/bin/rep.lua
.luarocks/lib/luarocks/rocks-5.1/luarepl/0.8-1/doc
.luarocks/lib/luarocks/rocks-5.1/luarepl/0.8-1/doc/COPYING
.luarocks/lib/luarocks/rocks-5.1/luarepl/0.8-1/doc/IDEAS.md
.luarocks/lib/luarocks/rocks-5.1/luarepl/0.8-1/doc/plugins.md
.luarocks/lib/luarocks/rocks-5.1/luarepl/0.8-1/doc/README.md
.luarocks/lib/luarocks/rocks-5.1/luarepl/0.8-1/doc/Roadmap.md
.luarocks/lib/luarocks/rocks-5.1/luarepl/0.8-1/luarepl-0.8-1.rockspec
.luarocks/lib/luarocks/rocks-5.1/luarepl/0.8-1/rock_manifest
.luarocks/lib/luarocks/rocks-5.1/manifest
.luarocks/share
.luarocks/share/lua
.luarocks/share/lua/5.1
.luarocks/share/lua/5.1/repl
.luarocks/share/lua/5.1/repl/console.lua
.luarocks/share/lua/5.1/repl/init.lua
.luarocks/share/lua/5.1/repl/plugins
.luarocks/share/lua/5.1/repl/plugins/autoreturn.lua
.luarocks/share/lua/5.1/repl/plugins/completion.lua
.luarocks/share/lua/5.1/repl/plugins/example.lua
.luarocks/share/lua/5.1/repl/plugins/filename_completion.lua
.luarocks/share/lua/5.1/repl/plugins/history.lua
.luarocks/share/lua/5.1/repl/plugins/keep_last_eval.lua
.luarocks/share/lua/5.1/repl/plugins/linenoise.lua
.luarocks/share/lua/5.1/repl/plugins/pretty_print.lua
.luarocks/share/lua/5.1/repl/plugins/rcfile.lua
.luarocks/share/lua/5.1/repl/plugins/rlwrap.lua
.luarocks/share/lua/5.1/repl/plugins/semicolon_suppress_output.lua
.luarocks/share/lua/5.1/repl/sync.lua
.luarocks/share/lua/5.1/repl/utils.lua

и я могу найти этот материал. Я попытался добавить строку в config.lua для загрузки пакетов из локальной установки, но безрезультатно:

$ cat ~/.luarocks/config.lua
local_by_default=true

(удаление не влияет)

я пропустил какой-то очевидный шаг?

запуск luarocks без аргументов дает мне:

CONFIGURATION
    Lua version: 5.1
    Configuration files:
        System: /usr/local/etc/luarocks51/config-5.1.lua (ok)
        User  : /Users/me/.luarocks/config.lua (ok)

    Rocks trees in use:
        /Users/me/.luarocks ("user")
        /usr/local ("system")

кажется, что пользовательское каменное дерево не находится в пути к пакету:

$ lua
Lua 5.1.5  Copyright (C) 1994-2012 Lua.org, PUC-Rio
> print(package.path)
./?.lua;/usr/local/share/lua/5.1/?.lua;/usr/local/share/lua/5.1/?/init.lua;/usr/local/lib/lua/5.1/?.lua;/usr/local/lib/lua/5.1/?/init.lua

Зачем?


person fferri    schedule 13.11.2017    source источник


Ответы (1)


Из https://github.com/luarocks/luarocks/wiki/Using-LuaRocks:

В большинстве инсталляций LuaRocks будет два дерева камней:

  • «системное» каменное дерево (используется по умолчанию)
  • «пользовательское» каменное дерево

Чтобы иметь возможность использовать модуль, нам нужно убедиться, что Lua может найти этот файл dkjson.lua, когда мы запускаем require("dkjson"). Вы можете проверить свои пути Lua из среды Lua, используя

print(package.path)
print(package.cpath)

Эти переменные могут быть предварительно настроены вне Lua, используя переменные окружения LUA_PATH и LUA_CPATH.

Если вы установили и Lua, и LuaRocks в их каталоги по умолчанию (/usr/local в Linux и Mac OSX), тогда «системным» деревом является /usr/local, и оно будет работать по умолчанию. Однако «пользовательское» дерево (для установки камней без прав администратора) Lua по умолчанию не обнаруживает. Для этого нам нужно настроить эти переменные среды.

LuaRocks предлагает полуавтоматический способ сделать это. Если вы введете следующую команду:

luarocks path --bin

он будет печатать команды, подходящие для вашей платформы, для настройки вашей среды. В типичных терминальных средах Unix вы можете ввести следующее:

eval $(luarocks path --bin)

и он временно применяет изменения к вашей оболочке. Чтобы эти переменные были установлены постоянно, вы должны настроить переменные среды в соответствии с конфигурацией вашей оболочки (например, добавив приведенную выше строку в ваш файл .bashrc, если ваша оболочка — Bash).

person fferri    schedule 13.11.2017