Как установить библиотеки для 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