PowerShell CoreからAnacondaを使用できるようにする方法

Anacondaを設定して、conda initとすると一通り、PowerShell Coreを含めたPowerShell用の設定もしてくれるのだが、この方法はPowerShellを立ち上げると毎回Anacondaが初期化されてしまう欠点がある。PowerShellで毎回Pythonを使うのであれば問題ないのだが、個人的な使用ケースとしてはPowerShellスクリプトのみで完結することも多く、これは非効率的になってしまう。

そのため、Initialize-CondaというCmdletを作成することにした。内容的な以下のような感じ。C:/Path/to/CondaをAnacondaの場所に変える。(GistでWindows版Linux版を取得可能。)

function Initialize-Conda
{
	$CONDA_ROOT_DIR = "C:/Path/to/Conda" # Change this
        [System.Environment]::SetEnvironmentVariable("CONDA_EXE", "$CONDA_ROOT_DIR/Scripts/conda.exe", [System.EnvironmentVariableTarget]::Process)
	[System.Environment]::SetEnvironmentVariable("_CE_M", "", [System.EnvironmentVariableTarget]::Process)
	[System.Environment]::SetEnvironmentVariable("_CE_CONDA", "", [System.EnvironmentVariableTarget]::Process)
    [System.Environment]::SetEnvironmentVariable("_CONDA_ROOT", "$CONDA_ROOT_DIR", [System.EnvironmentVariableTarget]::Process)
        [System.Environment]::SetEnvironmentVariable("_CONDA_EXE", "$CONDA_ROOT_DIR/Scripts/conda.exe", [System.EnvironmentVariableTarget]::Process)

        Import-Module -Scope Global "$Env:_CONDA_ROOT/shell/condabin/Conda.psm1"
        conda activate base
}

環境変数の設定が冗長になっているのは、通常の変数はスクリプト外にスコープを持たないため。.NETのSetEnvironmentVariableprocessのスコープで初期化することにより対応している。(LinuxではCONDA_EXE_CONDA_EXE$CONDA_ROOT_DIR/bin/condaとすること。)

尚、Add-CondaEnvironmentToPromptを使うとプレフィックスとしてConda環境をプロンプトに追加することができるが、挙動が曖昧だったので、今回は割愛している。

これに対応するPSD1は以下の通り。(Gistでも公開。)

@{
    RootModule = 'Conda.psm1'
    ModuleVersion = '1.0.0.0'
    FunctionsToExport = @(
            'Initialize-Conda'
        )
    CmdletsToExport   = '*'
    VariablesToExport = '*'
    AliasesToExport   = '*'
    GUID = '23421dee-ca6f-4847-9c93-1268c629964a'
    Author = 'Hideki Saito'
    Description = 'Anaconda Initializer'
    PowerShellVersion = '6.0'
    CompatiblePSEditions = 'Core'
    Copyright = '(c) 2019 Hideki Saito. All rights reserved.'
    PrivateData = @{
        PSData = @{
            ProjectUri = ''
            ReleaseNotes = ''
        }
    }
}

このファイルをそれぞれConda.psm1Conda.psd1として、Documents\PowerShell\Modules\Conda以下(Linuxでは~/.local/share/powershell/Modules/Conda)に配置すると、Initialize-Condaを読み出せるようになる。