Как установить библиотеки для Lua5.2 и 5.1 с помощью Luarocks?

Я пишу небольшой проект Lua и использую Luarocks для установки сторонних зависимостей. Версия Lua по умолчанию на моей машине — 5.2, и до этого момента все работало нормально.

Однако сегодня я наткнулся на проблему, которая меня смущает. Я хочу запустить свою программу на Lua 5.1 и Luajit, чтобы посмотреть, будет ли она работать на этих версиях, но мне трудно заставить Luarocks загрузить соответствующие версии зависимостей. В крайнем случае, я попытался указать Lua5.1 использовать библиотеки 5.2, установленные Luarocks (установив для переменной среды LUA_PATH то же значение, что и LUA_PATH5.12), но, к сожалению, этого недостаточно: мой проект зависит от LuaFileSystem, Модуль на основе C, поэтому мне нужно будет установить его отдельные версии для 5.1 и 5.2.

Что мне нужно сделать, чтобы установить версии моих зависимостей 5.1 и 5.2? Нужно ли передавать какие-то параметры команде theluarocks install? Нужно ли мне иметь несколько экземпляров Luarocks, установленных на моем компьютере? Одна вещь, которая меня смущает, это то, что вещи внутри папки .luarocks классифицируются как подпапки 5.2 (~/.luarocks/share/lua/5.2/), предполагая, что, возможно, может быть способ установить вещи в родственную папку 5.1, но в то же время есть только одна папка bin, что говорит о том, что luarocks может обрабатывать только одну версию Lua за раз...


person hugomg    schedule 02.12.2013    source источник


Ответы (4)


Судя по вашей ссылке на ~/.luarocks/share/lua/5.2/, вы, похоже, используете систему Unix (Linux или Mac). Вы можете установить последнюю версию LuaRocks дважды, как для Lua 5.1, так и для Lua 5.2, следующим образом:

./configure --lua-version=5.1 --versioned-rocks-dir
make build
sudo make install

И снова для 5.2:

./configure --lua-version=5.2 --versioned-rocks-dir
make build
sudo make install

Это даст вам /usr/local/bin/luarocks-5.1 и /usr/local/bin/luarocks-5.2. Если вы установили Lua 5.1 и 5.2 в /usr/local/, и каждый из них будет использовать свою собственную запись ~/.luarocks/lib/luarocks/rocks-5.x/ для дерева пользователей (и /usr/local/lib/luarocks/rocks-5.x для дерева систем) и устанавливать модули в нужное место в /usr/share/lua/5.x/ и ~/.luarocks/share/lua/5.x/ (и аналогично для lib) соответственно.

person Hisham H M    schedule 03.12.2013
comment
Когда я запустил configure for 5.1, я получил следующую ошибку: Lua version detected: 5.2 This clashes with the value of --with-lua-version.. Мне удалось обойти это, передав дополнительный параметр --lua-suffix=5.1. Однако это то, что должны сделать все остальные, или это было только у меня? - person hugomg; 12.12.2013
comment
Это произошло потому, что ваш бинарный файл lua был обнаружен первым. Ваш обходной путь в порядке. Я только что внес изменение, чтобы сделать его ненужным в будущих выпусках: / - person Hisham H M; 23.12.2013

По предложению moteus я решил установить вторую версию Luarocks для Lua 5.1. Но он использует Windows, а я использую Linux, поэтому вот что я сделал:

  • Загрузите исходный код последней версии Luarocks на веб-сайте Luarocks.

  • Из исходного каталога запустите скрипт ./configure:

    /configure --prefix="${HOME}/.luarocks51" --lua-suffix=5.1

    Параметр префикса говорит Luarocks помещать свои файлы в папку .luarocks51 рядом с существующей папкой .luarocks из моей установки 5.2 Luarocks. Параметр lua-suffix указывает Luarocks использовать Lua 5.1 вместо версии lua по умолчанию на моей машине (5.2). Это зависит от того, назвал ли я интерпретатор Lua 5.1 lua5.1 (мой Debian установил /usr/bin/lua5.1). Наконец, Luarocks удалось автоматически определить, где установлены заголовки и библиотеки 5.1 (/usr/include/lua5.1/), но если бы это было не так, я бы мог указать это с помощью параметров --with-lua-include и --with-lua-lib.

  • Скомпилируйте Luarocks с помощью make

  • Установите его с помощью make isntall (в Sudo нет необходимости, так как я устанавливаю его в локальный каталог).

  • Настроить мою среду 5.1 для использования библиотек, загруженных Luarocks . Я добавил следующее в свой .bashrc:

    export PATH=$PATH:~/.luarocks/bin:~/.luarocks51/bin
    export LUA_CPATH=";;${HOME}/.luarocks51/lib/lua/5.1/?.so"
    export LUA_PATH=";;${HOME}/.luarocks51/share/lua/5.1/?.lua;${HOME}/.luarocks51/share/lua/5.1/?/init.lua"
    
    export LUA_CPATH_5_2=";;${HOME}/.luarocks/lib/lua/5.2/?.so"
    export LUA_PATH_5_2=";;${HOME}/.luarocks/share/lua/5.2/?.lua;${HOME}/.luarocks/share/lua/5.2/?/init.lua"
    

    Конфигурация 5.1 также работает для Luajit.

  • Исполняемый файл для версии 5.1 luarocks называется luarocks-5.1:

    luarocks-5.1 install lfs
    
person hugomg    schedule 02.12.2013

Используя доморощенный, вы можете сделать:

brew install lua51  # Lua 5.1
brew install lua    # Lua latest

Luarocks поставляется с Lua, поэтому вы можете:

# Install Lua 5.1 version of any package
luarocks-5.1 install moonscript

# Install Lua latest version of any package
luarocks install moonscript
person aleclarson    schedule 10.02.2018

Вы должны указать как версию lua, так и каталог lua в последних версиях:

luarocks --lua-dir=$(brew --prefix)/opt/[email protected] --lua-version=5.1 install lua-cassandra
person Kamyar    schedule 12.09.2019