ディレクトリ/プロジェクトローカル環境変数を設定する良い方法はありますか?

ディレクトリ/プロジェクトローカル環境変数を設定する良い方法はありますか?

PATH私は、さまざまな環境変数(たとえば、さまざまなバージョンのclang実行可能ファイル、PYTHONPATH複数の外部モジュール)を必要とするいくつかのプロジェクトを進めてきました。プロジェクトを操作するたびに、これらの環境変数を直接変更する必要があります(例:.zshrc/.bashrcおよび変更source)。時々忘れてミスをします。

これを自動化するのに役立つ方法/プロジェクトはありますか?仮想環境Pythonではどうですか?

答え1

特定のディレクトリの環境変数を設定するように設計された成熟したツールがあります。

この目的のために設計された他のツールと比較すると、direnvその中で最高です。主な利点の1つは、サポートすることです。削除するディレクトリを終了するときに環境変数を変更します。

direnvシェル環境スイッチャーです。 bash、zsh、tcsh、fish shell、elvishを接続してロードまたはロードする方法を知っています。削除する環境変数は現在のディレクトリによって異なります。これを通してプロジェクト別環境~/.profileファイルを乱すことなく変数をクリーンアップします。

direnv他の同様のツールとの違いは何ですか?

  • direnvGoで書かれています。急いでPythonで書かれた対応項目との比較
  • direnvサポートする削除する特定のディレクトリを終了するときに環境変数を使用する
  • direnv多くの殻で覆われている

類似プロジェクト

  • 環境モジュール- 最も古い(良い意味で)環境ローディングシステムの1つ
  • 自動環境- Lightはアンインストールをサポートしていません。 Pythonで書くと非常に遅いです。
  • zsh-autoenv- 豊富な機能を備えたautoenvとスマートCD:イベント入力/終了、ネスト、非表示(Zshのみ)。
  • ~~アスダフ~~、asdfは同じ実行可能ファイルの異なるバージョンを切り替えるためのプラグインマネージャです。まったくコンテキストスイッチャではありません。

答え2

add-zsh-hookzshを使用すると、イベントを呼び出すことで簡単に実行できますchpwd

env_on_chdir () {
    case $PWD in
        /home/user/path/to/dir )
            export GO111MODULE=on;
            ;;
        /home/user/other/dir )
            export NO_COLOR=true;
            ;;
        * )
            # change background, when entering any other directory
            export GO111MODULE=off;
            unset NO_COLOR;
            ;;
    esac
}

# add env_on_chdir to chpwd_functions
add-zsh-hook chpwd env_on_chdir

詳細については、次を参照してください。https://www.refining-linux.org/archives/42-ZSH-Gem-8-Hook-function-chpwd.html

答え3

はい、管理が多すぎ、個人持ち物が多すぎます。
常に使用できるように、プラットフォームに適した名前の範囲を確保するためにほとんどの努力を払うことをお勧めします。 PYTHONPATHは良い例です。 Rubyプロジェクトでこれを再利用したくないでしょう。.bashrcメンテナンスを容易にするために、コメントを使用してグループをグループ化してラベルを付けることができます。
これは必ずしも可能ではありません。競合がある場合(また、個々のファイルを使用する代わりに編集が必要です)、フレームワーク固有の設定ファイルが必要な場合があります。 1つの方法は、別名を設定して次のように実行することです。

例えば

alias pp='. ~/pp.setup' # For using Python
alias rb='. /rb.setup'  # For using Ruby

変数を有効/設定し、渡された引数にのみ切り替えるか、最新ではないコンテンツにのみ切り替える「コンバータ」に似た関数を作成することもできます。

答え4

あなたはそれを使用することができますディレンフディレクトリ変更時に環境変数をロードします。ホームページから:

direnvはシェル環境スイッチャーです。現在のディレクトリに基づいて環境変数をロードまたはアンロードするためにbash、zsh、tcsh、fish shell、elvishをリンクする方法を知っています。これにより、 ~/.profile ファイルを複雑にすることなく、プロジェクト固有の環境変数を使用できます。

xonsh私は(小さなアドインを介して)シェルで使用するのに本当にうまくいきます。

関連情報