Mac の Homebrew でディレクトリごとに特定のバージョンのパッケージを使用する

Mac の Homebrew でディレクトリごとに特定のバージョンのパッケージを使用する

私はよく、インストールされたパッケージの特定のバージョンに切り替えることがあります。自家製プロジェクトを切り替えるとき。

$ cd ~/Desktop/projects/project1
$ brew switch phantomjs 2.0.0
Cleaning /usr/local/Cellar/phantomjs/1.9.7_1
Cleaning /usr/local/Cellar/phantomjs/1.9.8
Cleaning /usr/local/Cellar/phantomjs/2.0.0
2 links created for /usr/local/Cellar/phantomjs/2.0.0

プロジェクトを変更するときは次のようになります。

$ cd ~/Desktop/projects/project2
$ brew switch phantomjs 1.9.8
Cleaning /usr/local/Cellar/phantomjs/1.9.7_1
Cleaning /usr/local/Cellar/phantomjs/1.9.8
Cleaning /usr/local/Cellar/phantomjs/2.0.0
2 links created for /usr/local/Cellar/phantomjs/1.9.8

brewこれを自動化して、特定のプロジェクト内で指定されたバージョンに自動的に切り替えるように強制することは可能ですか?

.homebrewターゲット ディレクトリ内に のような名前のファイルを作成し、そこから必要なパッケージとバージョンを指定できれば便利です。

答え1

あなたの質問に直接答えるには、オンディール個人的には使用していませんが、あなたのユースケースに適しているようです。

ondir は、特定のディレクトリに固有のタスクを自動化する小さなプログラムです。ディレクトリに出入りするときに、ディレクトリ内のスクリプトを実行することで機能します。

ちょっと考えてみると…

シェル経由でディレクトリに入る/出るときにパッケージのバージョンを交換するのは、さまざまな理由から危険です。(まず、それぞれ独自のディレクトリにある 2 つのターミナル セッションについて考えてみましょう。)

あなたが求めているのは(ディレクトリごとのhomebrew設定)実質的には仮想マシンまたはコンテナであり、それは言語の「仮想化」を超えています(例:Ruby経由rbenv、Python経由virtualenv`) はすべてのシステムパッケージに適用されます。浮浪者プロジェクトを Mac から適切に分離し、依存関係をより適切に管理するには、プロジェクト用のボックスを使用します。

とにかく、あなたの問題に戻りましょう...

PhantomJSは、便利なスタンドアロンツールとして利用できる静的にリンクされたバイナリこれをうまく利用することができます。 を介して PhantomJS のバージョンを交換する代わりにbrew switch、静的にリンクされた各バージョンをダウンロードし、バイナリを に貼り付け~/bin、適切な名前を付け (例phantomjs-1.9.8)、スクリプトを調整して目的のバージョンを呼び出すだけです。スクリプトを調整できない場合は、別のスキーム (プロジェクト固有のシンボリックリンクなど) を考案する必要があります。

あるいは、GitHub でのクエリPATHまた、ondirまたは任意のドライブをラップするスクリプトを介してを調整することもできますphantomjs

(はい、一晩で二度目個人的に使用したことのないツールを誰かに紹介しました。

関連情報