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

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

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

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

5 ответов

Решение

На основании вашей ссылки на ~/.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) соответственно.

По предложению 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-суффикса указывает 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 (Судо не нужно, так как я устанавливаю его в локальный каталог).

  • Настройте мою среду 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
    

Вот как я это делаю. https://gist.github.com/moteus/6823437 Мой английский не очень хорош. Но я думаю, что это может быть полезно.

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

luarocks --lua-dir=$(brew --prefix)/opt/lua@5.1 --lua-version=5.1 install lua-cassandra

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

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

У меня была такая же проблема. и хотел что-то более автоматическое, что я буду использовать повторно.

Я очень привык к Ruby RVM. И поэтому я хотел вдохновиться этим. Я просто делаю 3 быстрые функции bash, чтобы удовлетворить мои потребности. Не стесняйтесь использовать их, но они проверены только на ArchLinux

https://github.com/mathieujobin/lua_version_manager

Другие вопросы по тегам