私は小さなLuaプロジェクトを作成し、Luarocksを使用してサードパーティの依存関係をインストールしています。私のマシンのデフォルトのLuaバージョンは5.2で、この時点まではすべてが正常に機能しています。
しかし、今日、私は私を混乱させている問題に出くわしました。 Lua 5.1とLuajitでプログラムを実行して、これらのバージョンでも機能するかどうかを確認したいのですが、Luarocksに依存関係の適切なバージョンをダウンロードさせるのに苦労しています。最後の手段として、Luarocksがインストールした5.2ライブラリを使用するようにLua5.1に指示しようとしましたが(LUA_PATH
環境変数をLUA_PATH_5_2
と同じ値に設定することにより)、残念ながらそれだけでは不十分です。 :私のプロジェクトはCベースのモジュールであるLuaFileSystemに依存しているため、5.1と5.2用に別々のバージョンをインストールする必要があります。
依存関係の5.1バージョンと5.2バージョンの両方をインストールするには何をする必要がありますか? luarocks install
コマンドにいくつかのパラメーターを渡す必要がありますか?マシンにLuarocksの複数のインスタンスをインストールする必要がありますか?私を混乱させる1つのことは、.luarocks
フォルダー内で物事が5.2サブフォルダー(〜/ .luarocks/share/lua/5.2 /)に分類されていることです。これは、物事をにインストールする方法がある可能性があることを示唆しています。兄弟の5.1
フォルダーですが、同時にbin
フォルダーは1つしかないため、luarocksは一度に1つのバージョンのLuaしか処理できないことを示しています...
~/.luarocks/share/lua/5.2/
への参照に基づくと、Unixシステム(LinuxまたはMac)を実行しているようです。次のように、Lua5.1とLua5.2の両方にLuaRocksの最新バージョンを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
が取得されます。 Lua5.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が提案したように、私はLua5.1用のLuarocksの2番目のバージョンをインストールすることにしました。しかし、彼はWindowsを使用しており、私はLinuxを使用しているので、これが私がしたことです。
Luarocksの最新バージョンのソースを Luarocks Webサイト からダウンロードします。
ソースディレクトリから、./configure
スクリプトを実行します。
/configure --prefix="${HOME}/.luarocks51" --lua-suffix=5.1
プレフィックス設定は、Luarocksに5.2インストールのLuarocksの既存の.luarocks51
フォルダーの隣にある.luarocks
フォルダーにその内容を配置するように指示します。 lua-suffixパラメーターは、私のマシン(5.2)のデフォルトのluaバージョンの代わりにLua5.1を使用するようにLuarocksに指示します。これは、Lua5.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は必要ありません)。
Luarocksによってダウンロードされたライブラリを使用するように5.1環境 を構成します。 .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でも機能します。
Luarocksの5.1バージョンの実行可能ファイルの名前はluarocks-5.1
です。
luarocks-5.1 install lfs
これは私がこれを行う方法です。 https://Gist.github.com/moteus/6823437 私の英語はあまり上手ではありません。しかし、私はそれが役に立つかもしれないと思います。
私はこれとまったく同じ問題を抱えていました。再利用できるもっと自動化されたものが欲しかったのです。
私はRuby RVMに非常に慣れています。それで、インスピレーションを得たいと思いました。ニーズに対応するために3つのクイックbash関数を作成するだけです。自由に使用してください。 ArchLinuxでテスト済み
自作を使用して、あなたはすることができます:
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
最新バージョンでは、luaバージョンとluadirの両方に言及する必要があります。
luarocks --lua-dir=$(brew --prefix)/opt/[email protected] --lua-version=5.1 install lua-cassandra