打开不同于命令提示符的“ Anaconda”提示符是什么意思,怎么办?

gcr

Anaconda命令提示符看起来像普通的Windows命令提示符,并且它的开始菜单快捷方式可追溯到C:\ Windows \ System32目录中Windows上的cmd.exe文件,因此我知道它只是命令提示符下的一个实例特征或特征。我对所有其他这些方面感到好奇。

当我单击“ Anaconda Prompt”快捷方式的属性时,目标是"%windir%\System32\cmd.exe" /K" C:\ProgramData\Anaconda3\Scripts\activate.bat C:\ProgramData\Anaconda3这样,因此它具有一些额外的参数。在这些参数中,打开香草命令提示符和Anaconda之间是有区别的。

分解这些命令,/ k选项似乎此处进行了描述此处表示运行命令并返回到提示符,尽管这些引用引用的是小写的/ k。

下一个参数指向一个bat文件以激活Anaconda脚本。然后,它将路径传递到名为“ Anaconda3”的目录。我可以肯定它所经过的路径,因为最终的arg表示它希望此路径像在用户或系统路径环境变量中一样可访问。Python.exe(Python 3)位于此目录中,还有_conda.exe和重要的Scripts文件夹,因此如果我们在系统或用户路径中没有python,就可以找到它,我是相当肯定。

回到.bat文件,这做了很多事情。由于蝙蝠在系统上的行为,尽管它们始终是二进制文件,但它们实际上就像Windows的Bash脚本一样。它们是人类可读的,其内容如下:

@set "_args1=%1"
@set _args1_first=%_args1:~0,1%
@set _args1_last=%_args1:~-1%
@set _args1_first=%_args1_first:"=+%
@set _args1_last=%_args1_last:"=+%
@set _args1=

@if "%_args1_first%"=="+" if NOT "%_args1_last%"=="+" (
    @CALL "%~dp0..\condabin\conda.bat" activate
    @GOTO :End
)

@REM This may work if there are spaces in anything in %*
@CALL "%~dp0..\condabin\conda.bat" activate %*

:End
@set _args1_first=
@set _args1_last=

该.bat在附近的目录中使用其自己的代码调用另一个.bat“ conda.bat”:

@IF NOT DEFINED _CE_CONDA (
  @SET _CE_M=
  @SET "CONDA_EXE=%~dp0..\Scripts\conda.exe"
)
@IF [%1]==[activate]   "%~dp0_conda_activate" %*
@IF [%1]==[deactivate] "%~dp0_conda_activate" %*

@SETLOCAL EnableDelayedExpansion
@IF DEFINED _CE_CONDA (
  @REM when _CE_CONDA is defined, we're in develop mode.  CONDA_EXE is actually python.exe in the root of the dev env.
  FOR %%A IN ("%CONDA_EXE%") DO @SET _sysp=%%~dpA
) ELSE (
  @REM This is the standard user case.  This script is run in root\condabin.
  FOR %%A IN ("%~dp0.") DO @SET _sysp=%%~dpA
  IF NOT EXIST "!_sysp!\Scripts\conda.exe" @SET "_sysp=!_sysp!..\"
)
@SET _sysp=!_sysp:~0,-1!
@SET PATH=!_sysp!;!_sysp!\Library\mingw-w64\bin;!_sysp!\Library\usr\bin;!_sysp!\Library\bin;!_sysp!\Scripts;!_sysp!\bin;%PATH%
@SET CONDA_EXES="%CONDA_EXE%" %_CE_M% %_CE_CONDA%
@CALL %CONDA_EXES% %*
@ENDLOCAL

@IF %errorlevel% NEQ 0 EXIT /B %errorlevel%

@IF [%1]==[install]   "%~dp0_conda_activate" reactivate
@IF [%1]==[update]    "%~dp0_conda_activate" reactivate
@IF [%1]==[upgrade]   "%~dp0_conda_activate" reactivate
@IF [%1]==[remove]    "%~dp0_conda_activate" reactivate
@IF [%1]==[uninstall] "%~dp0_conda_activate" reactivate

@EXIT /B %errorlevel%

如我所料,当我在普通的(admin)命令提示符下调用activate.bat文件时,当您单击启动快捷方式时,它变成了带有我的当前路径之前的“(base)”前缀的Anaconda提示符。(base) C:\Users\User>有趣的是,尽管有一个单独的Powershell启动器可以正常运行,但这似乎只能在常规命令提示符下运行,而不是Git Bash,WSL,甚至Powershell。在其属性中,它具有目标:%windir%\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy ByPass -NoExit -Command "& 'C:\ProgramData\Anaconda3\shell\condabin\conda-hook.ps1' ; conda activate 'C:\ProgramData\Anaconda3' "
并且,如果您运行ps1文件(类似于脚本的Powershell),则具有将您置于conda环境中的效果,因为您可以运行“ conda”命令并显示帮助说明。

这是ps1代码。

$Env:CONDA_EXE = "C:/ProgramData/Anaconda3\Scripts\conda.exe"
$Env:_CE_M = ""
$Env:_CE_CONDA = ""
$Env:_CONDA_ROOT = "C:/ProgramData/Anaconda3"
$Env:_CONDA_EXE = "C:/ProgramData/Anaconda3\Scripts\conda.exe"

Import-Module "$Env:_CONDA_ROOT\shell\condabin\Conda.psm1"
Add-CondaEnvironmentToPrompt

无论如何,这只是一种背景环境,这是我在最近几个小时的研究中学到的,因为我想做家庭作业。我想并且想知道当您通过Anaconda打开命令提示符时,Conda在Windows中正在做什么。我敢肯定,它在做两件事:设置C:\ProgramData\Anaconda3会话目录以包含目录,并激活它的基本环境或您告诉它启动的任何其他虚拟环境,您可能是在某个时候通过它创建的,但这还有其他值得注意的地方吗?

我问这不仅是因为我对正在发生的事情感到好奇,而且我还希望与Conda在Git Bash和WSL中合作,这是我真正喜欢的终端。我目前可以将Conda的Python与它们一起使用(计算机上唯一的Python),因为它似乎独立于安装它并为它管理软件包的程序,但是我特别希望使用Git内部的所有Conda环境管理工具。 Bash或WSL。在考虑之后,我现在认为这是不可能的。从幼稚的用户角度来看,一种假设是他们可以在任何地方运行任何程序,这在我们将子系统和系统包含在系统中之前是有意义的,或者应该是有意义的,但是从更清楚的角度来看,Anaconda的安装目的是为了Windows和内部C:\ProgramData\Anaconda3目录是.exe和.bat文件,而不是Linux / WSL兼容的二进制文件和.sh或.bash文件。这就像尝试运行Windows_OS> Linux子系统> Windows_file_again,但那样行不通。WSL和Git Bash甚至都没有相同的路径结构。到目前为止,我的想法正确吗?

我比Powershell或cmd更喜欢Git Bash和WSL,并且在GCC和git上经常使用它们。我使用VS Code进行大部分编码,并在那里启动这些终端。我想如果存在这样的话,我充其量可以为git bash或wsl安装conda,但是即使那样,它也可能无法与我的主要Conda对话或共享环境。否则,我可以尝试在某个环境中使用venv,因为它似乎可以通过python在这些shell中工作,或者如果我真的想使用Conda,可以使用常规命令提示符执行所有操作。

我的评估正确吗?

感谢您的支持!要擅长某些事情,必须达到显而易见的地步,否则您就有可能在最不希望出现的时候迷失和困惑。

编辑:现在我回来了,我重新发现了最初的障碍:事实上,无法从VS Code直接使用Conda的命令提示符,或者一旦启动正常的命令提示符就无法激活它。现在,我至少了解.bat启动脚本,并且理论上可以每次以这种方式激活它。但这有点尴尬,或者我可以在外部启动提示符并导航到我的工作目录,但这也很笨拙。我忘记了这是我的第一个阻止者,并且在相关说明中,我对x64本机工具(基于Visual Studio的命令提示符)也遇到了类似的问题。我想知道那又是什么,为什么它看起来像一个独立的终端,但是我无法在VS Code中启动它。

飞天猫

对于WSL,是的,您是正确的。运行conda为Windows安装的,与尝试运行为Windows安装的任何其他程序的相同->由于二进制文件不兼容,它将失败。您可能可以在那里安装linux版本,但是正如您所指出的那样,这不是您想要的。

对于git bash,解决方案比您想象的要简单。您可以对其进行设置,以便可以与Windows安装的conda“对话”。是的,您将需要具有与已经发现的功能cmd和powershell相同的设置,但是conda已经具有设置它所需的一切。

假设您的安装位于C:\Users\foo\miniconda3\git bash中,请执行以下操作:

/c/Users/foo/miniconda3/Scripts/activate
conda init bash

这将修改您的bash_profile以自动设置git bash使用的conda


一些说明:

我现在不相信这是可能的。从幼稚的用户角度来看,一种假设是他们可以在任何地方运行任何程序,这在我们将子系统和系统包含在系统中之前是有意义的,或者应该是有意义的,但是从更清楚的角度来看,Anaconda的安装目的是为了Windows和C:\ ProgramData \ Anaconda3目录中的文件均为.exe和.bat文件,而不是Linux / WSL兼容的二进制文件以及.sh或.bash文件。这就像尝试运行Windows_OS> Linux子系统> Windows_file_again,但那样行不通。WSL和Git Bash甚至都没有相同的路径结构

正如您所指出的,WSL是一个子系统,并且由于wsl 2运行真正的linux内核正如您已经说过的,自然无法从中运行Windows二进制文件。

但是,Git bash根本不是子系统。相反,它是Windows的bash端口。这意味着当您进入git bash时,您仍处于Windows环境中。只有路径和命令的语法不同(请参阅我提供的上述命令),但是您仍在同一系统中。

如果你看文件

C:\Users\foo\miniconda3\Scripts\activate

你还会看到,这是一个正常的.sh脚本,调用conda.sh

C:\Users\a-fjochhe\miniconda3\etc\profile.d\conda.sh

因此,ana / miniconda确实提供了一组sh脚本,您可以在Windows的bash终端中使用它们

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章