【问题标题】:How to activate a conda environment within a PowerShell ScriptBlock如何在 PowerShell ScriptBlock 中激活 conda 环境
【发布时间】:2020-09-30 23:24:16
【问题描述】:

我希望使用 PowerShell 远程运行/管理 Miniconda。在远程 PC 上,使用以下命令安装了 Miniconda3:

Miniconda3-latest-Windows-x86_64.exe /InstallationType=JustMe /RegisterPython=1 /AddToPath=1 /S /D=%UserProfile%\Miniconda3

注意选项/AddToPath=1conda 添加到PATH 环境变量中。

在远程计算机上,使用 PowerShell 创建一个 conda 环境:

PS C:\> Invoke-Command -ComputerName otherpc -ScriptBlock {conda create -n py36 python=3.6}

酷,成功了:

PS C:\> Invoke-Command -ComputerName otherpc -ScriptBlock {conda env list}

# conda environments:
#
base                  *  C:\Users\user1\Miniconda3
py36                     C:\Users\user1\Miniconda3\envs\py36

但是,不能简单地激活新环境:

PS C:\> Invoke-Command -ComputerName otherpc -ScriptBlock {
>>  conda activate py36
>>  conda info
>> }

     active environment : None
       user config file : C:\Users\user1\.condarc
 populated config files :
          conda version : 4.8.5
    conda-build version : not installed
         python version : 3.8.5.final.0
       virtual packages :
       base environment : C:\Users\user1\Miniconda3  (writable)
           channel URLs : https://repo.anaconda.com/pkgs/main/win-64
                          https://repo.anaconda.com/pkgs/main/noarch
                          https://repo.anaconda.com/pkgs/r/win-64
                          https://repo.anaconda.com/pkgs/r/noarch
                          https://repo.anaconda.com/pkgs/msys2/win-64
                          https://repo.anaconda.com/pkgs/msys2/noarch
          package cache : C:\Users\user1\Miniconda3\pkgs
                          C:\Users\user1\.conda\pkgs
                          C:\Users\user1\AppData\Local\conda\conda\pkgs
       envs directories : C:\Users\user1\Miniconda3\envs
                          C:\Users\user1\.conda\envs
                          C:\Users\user1\AppData\Local\conda\conda\envs
               platform : win-64
             user-agent : conda/4.8.5 requests/2.24.0 CPython/3.8.5 Windows/10 Windows/10.0.17763
          administrator : True
             netrc file : None
           offline mode : False

我尝试在 ScriptBlock 的开头添加 conda init,这只会对各种 shell 文件添加“无更改”,包括一些 *.ps1 文件,但没有解决任何问题。

如何在 PowerShell ScriptBlock 中激活 conda 环境?

【问题讨论】:

  • 我不在 Windows 上,但对于 POSIX shell,conda init 仅创建要在 shell 初始化期间运行的代码 - 它实际上并不运行这些命令。假设它在 PowerShell 上类似,您可能需要在会话中获取脚本 miniconda3/shell/condabin/Conda.psm1 以启用 conda activate 命令。不过不确定。

标签: powershell conda remote-access miniconda


【解决方案1】:

我找到的解决方案是使用之前由conda init 配置的启动脚本注册一个 PowerShell 会话配置:

Invoke-Command -ComputerName otherpc -ScriptBlock {
  Register-PSSessionConfiguration -Name UserProfile -StartupScript %USERPROFILE%\Documents\WindowsPowerShell\profile.ps1
}
# restart afterward
Get-Service -ComputerName otherpc -Name WinRM | Restart-Service

这只需要做一次,并且存储在注册表中:

Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\WSMAN\Plugin\UserProfile

现在使用-ConfigurationName UserProfile 和后续的Invoke-Command,例如:

Invoke-Command -ComputerName otherpc -ConfigurationName UserProfile -ScriptBlock {
  conda activate py36
  conda info
}

【讨论】:

    猜你喜欢
    • 2021-01-16
    • 2016-06-08
    • 2021-07-18
    • 2019-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多