如何更改默认的Anaconda Python环境

235

我已经安装了Anaconda并创建了两个额外的环境:py3k(包含Python 3.3)和 py34(包含Python 3.4)。除此之外,我还有一个名为“root”的默认环境,这是Anaconda安装程序默认创建的,并且其中包含Python 2.7。每当我从终端启动'ipython'时,默认情况下使用的是Python 2.7。为了使用Python 3.4,我需要在shell中输入以下命令:

source activate py34
ipython

这会将默认环境更改为Python 3.4。这很好用,但有点麻烦,因为我大多数时间都在使用Python 3.4,而不是Python 2.7(我保留它是出于教学目的,这是一个相当长的故事)。无论如何,我想知道如何将默认环境更改为Python 3.4,记住我不想从头开始重新安装所有东西。


7
你考虑过将 source activate py34 加入你的 .bashrc 文件中吗?这样可以使操作更加便捷且不会改变原意。 - cel
1
谢谢你的回答。我还没有尝试过,因为我认为从bash脚本中调用source activate是不可能的,因为source命令需要在同一个shell中运行,而不是在子shell中运行。我已经尝试将上面的两行代码放入bash脚本中,但是我可以说这样做是不起作用的。 - user2734434
4
我在我的.bashrc文件中设置了CONDA_ROOT="/Users/bla/miniconda"source ${CONDA_ROOT}/bin/activate ${CONDA_ROOT}/envs/empty &> /dev/null,看起来一切正常。 - cel
1
我认为.bashrc并不是作为一个脚本运行的,而是由新的shell引用的,因此你不能通过运行bash脚本来检查它。 - cel
3
@user2734434,bashrc文件在会话开始时被引用,因此如果您将source activate放入其中,它将影响shell环境。 - asmeurer
我喜欢@cel的回应 - 我会将其与运行'conda config --set changeps1 False'相结合,这样您就不会在提示符中看到配置名称。 缺点是您永远看不到提示符中的配置详细信息。 - MrMas
18个回答

111

如果你只想暂时切换到另一个环境,请使用

source activate environment-name

注:此内容可能已过时。我相信当前正确的命令是:

source conda activate environment-name

(你可以使用 conda create 创建 environment-name


要永久更改,除了创建一个运行上述代码的启动脚本之外,没有其他方法。


通常最好只创建新环境。但是,如果您真的想在默认环境中更改Python版本,则可以按以下方式操作:

首先,请确保您运行的是最新版本的conda:

conda update conda

然后运行

conda install python=3.5

这将尝试将根环境中所有软件包更新为Python 3版本。如果不可能(例如,因为某些软件包不支持Python 3.5),它将会给出一个错误消息,指明哪些软件包导致了问题。

如果您使用pip安装了软件包,则需要重新安装它们。


1
@flutefreak 现在它实际上可以在Windows上运行了(首先运行“conda update conda”以确保您拥有最新版本)。我会更新答案。 - asmeurer
185
这个回答似乎与问题没有联系,问题是关于更改默认环境的。 - Bob
20
但这并不是被要求的内容。他不想在任何环境中更新包。他想将py34设置为默认环境,在没有干预的情况下处于活动状态,所以在发送“source activate”命令之前,py34就已经处于活动状态了。 - Bob
21
我同意@Bob的观点。根环境中的软件包将会升级到3.5版本,这可能已经解决了原帖作者的问题。但是当你打开提示符时,你仍然会处于根环境中,因此你并没有指定另一个默认环境。由于每个想要实现这一点并且搜索它的人最终都会来到这个问题,如果能够回答原始问题就更好了。也许把默认环境改为除了根环境之外的其他环境不可能? - arjan
4
无效,我的默认Python版本是3.4,使用标志“python=3.5”无法将Python从3.4升级到3.5...有什么建议吗? - WillZ
显示剩余5条评论

87

概述
有些人因为兼容性原因而拥有多个具有不同Python版本的Conda环境。在这种情况下,应该在shell初始化文件(例如.bashrc.zshrc)中激活所需的默认环境。通过这种方法,你可以保留你在环境中使用的Python版本。

以下假设environment_name是你的环境名称

Mac / Linux:
编辑你的bash配置文件,使其最后一行为conda activate environment_name。在Mac OSX中,这是~/.bash_profile,在其他环境中可能是~/.bashrc

示例:
以下是我在Mac OSX上的操作步骤

  1. 打开终端并输入:

    nano ~/.bash_profile

  2. 到文件末尾,并输入以下内容,其中“p3.5”是我的环境名称:

    conda activate p3.5

  3. 退出文件,然后打开一个新的终端窗口。

  4. 输入以下命令以查看当前激活的环境:

    conda info -e

结果显示我默认使用我的p3.5环境。

对于Windows:
创建一个批处理文件(.cmd),其中包含activate environment_name,然后按照以下说明执行它,以便在打开命令提示符时自动执行该文件

  1. 创建一个批处理文件,例如“my_conda.cmd”,并将其放入应用程序数据文件夹中。
  2. 配置它在每次打开cmd时自动启动。此设置在注册表中:
    键:HKCU\SOFTWARE\Microsoft\Command Processor
    值:AutoRun
    类型:REG_EXPAND_SZ
    数据:“%AppData%\my_conda.cmd”

来源: https://superuser.com/a/302553/143794


1
非常感谢。我发现我的Mac版本无法摆脱Python 2,所以按照建议采取了设置两个单独环境的行动,但每次打开新终端窗口都要记得激活环境非常麻烦。这个方法很有效! - Livvy Jeffs
当我在Windows 10下执行此操作时,会导致管道破裂和命令提示符冻结。 - aaronsnoswell
在Windows 10上的任何人有更好的运气吗? - Wassadamo
4
这应该是被接受的答案(至少对于基于Unix的Conda)! - DrGorilla.eth
3
用户还应该设置 conda config --set auto_activate_base false,以跳过在 Conda 初始化代码期间激活 base - merv
在Ubuntu上,我建议编辑.bashrc文件。如果你编辑bash_profile文件,可能无法设置conda环境。 - undefined

53

在Linux下,通过修改~/.bashrc~/.bash_profile可以更轻松地设置默认环境。最后你会发现像这样的内容:

# added by Anaconda 2.1.0 installer
export PATH="~/anaconda/bin:$PATH"
替换为。
# set python3 as default
export PATH="~/anaconda/envs/python3/bin:$PATH"

就是这样了,没什么别的了。


4
什么是问题? - Dieter Meemken
我尝试过这个解决方案,但我的路径上仍然显示anaconda2,有什么想法吗? - William Ross
18
这并不设置默认环境。它似乎绕过了conda,并欺骗其认为“python3”是默认环境。 "conda info -e" 仍然显示“root”作为当前环境。我仍在寻找一种告诉conda哪个是默认环境的方法。 - MrMas
10
这并不是从conda的角度设置默认环境。它似乎绕过conda并欺骗其认为“python3”是默认值。“conda info -e”仍然显示“root”作为当前环境。要解决这个问题,您还需要设置CONDA_PREFIX和CONDA_DEFAULT_ENV。即使如此,答案仍然是一个hack;为什么不直接运行“source activate <new default environment>”,因为这已经作为conda提供的“内置”方法来实现了。 - MrMas
在Windows 10上是否有.bashrc.bash_profile文件?我在按照 https://jattenberg.github.io/PDS-Fall-2013/assets/install/AnacondaPythonInstallationGuide.pdf的指导安装Anaconda Python时,在cygwin下找到了一个。但是我不确定它是否是我应该更改以获取OP所需功能的内容。 - Wassadamo

33

对于Windows系统,Anaconda自带Anaconda Prompt,它是cmd的快捷方式,可以直接运行conda命令而无需将anaconda添加到PATH变量中。 找到其位置,复制并重命名该副本(例如myenv_prompt)。右键单击myenv_prompt,在上下文菜单中选择属性。

enter image description here

< p > 属性窗口的 < em >目标表单 应该已经填写了文本,类似于 < code >%windir%\system32\cmd.exe "/K" C:\Users\xxx\AppData\Local\Continuum\Miniconda3\Scripts\activate.bat C:\Users\xxx\AppData\Local\Continuum\Miniconda3\ 这个命令有三个部分:1)启动...\cmd.exe 2)使用环境运行...\acitvate.bat 3)...\Miniconda3\ < p > 将第三部分更改为您想要作为默认值的环境(例如myenv)的路径,即将 < em >目标表单 填充为类似于 < code >%windir%\system32\cmd.exe "/K" C:\Users\xxx\AppData\Local\Continuum\Miniconda3\Scripts\activate.bat C:\Users\xxx\AppData\Local\Continuum\Miniconda3\envs\myenv < p > 现在,myenv_prompt将作为使用myenv作为Python默认环境启动cmd的快捷方式。您可以将此快捷方式保留在开始菜单中或固定在任务栏中。

此方法的一个优点是,您可以创建几个快捷方式,每个快捷方式都具有不同的环境作为默认环境。此外,您可以通过填写 “启动” 表单来设置默认文件夹的位置。

希望这可以帮助到您

PS:不需要查找Anaconda提示,可以通过更改任何快捷方式的目标来完成。但是,您需要知道cmd.exe和activate.bat的路径


7
这应该是最佳答案。 - James McCormac
我使用这种方法,但我的第一部分有点不同:C:\Windows\System32\cmd.exe /c start "" 不确定我是如何得出这个解决方案的,但这里是我关于它语法的帖子。链接 - xtian

13

当你加载终端/ shell 时,只需激活你的 py34 环境。

如果你使用Bash,请添加以下行:

conda activate py34

在你的.bash_profile(或.bashrc)中:

$ echo 'conda activate py34' >> ~/.bash_profile

每次运行新终端时,conda环境py34将被加载。


1
这是问题的答案! - Jonatan Öström
@Brandt 我遇到了一个错误(我在Mac上),zsh:permission denied。 - CN_Cabbage

11
如果您想让Anaconda Navigator默认使用您创建的虚拟环境,请转到“文件”>“首选项”,在下拉列表中选择默认的conda env: enter image description here 如果您希望Anaconda命令自动打开虚拟环境而无需键入activate envName命令,请执行以下操作:
右键单击conda快捷方式,转到属性并将目标更改为以下内容:
%windir%\System32\cmd.exe "/K" C:\Anaconda\Scripts\activate.bat C:\Anaconda\envs\p37

如下图所示,您可以选择将默认工作目录设置为我在快照中所做的那样:

输入图像描述

gl


这会为除了Anaconda Prompt之外的任何其他东西设置默认值吗?例如,如果您启动PowerShell,它是否也会默认使用这个新环境? - merv
Anaconda Navigator GUI的偏好设置对我没有任何作用。但是您建议将路径作为参数添加到activate.bat中的环境中,这真的很管用!谢谢!C:\ Anaconda \ Scripts \ activate.bat C:\ Anaconda \ envs \ p37 - Michael Currie

10

截至2018年12月的正确答案是......你不能。升级conda install python=3.6可能有效,但如果您有必要但无法卸载的软件包,则可能不起作用。

Anaconda使用名为base的默认环境,您无法创建一个新的(例如python 3.6)与相同名称的环境。这是有意为之的。如果您希望将Anaconda基础设置为python 3.6,正确的方法是安装针对python 3.6的Anaconda。作为软件包管理器,Anaconda的目标是使不同的环境封装在一起,这就是为什么您必须激活它们并且不能随意切换基础软件包的原因,因为这可能会导致生产系统上的许多问题。


1
如果我的基础环境出现问题,我想要用一个可行的环境来替换它,该怎么办? - endolith
1
如果我的基础环境出现问题,我想要用一个可行的环境来替换它怎么办?重新安装Conda。 - AMC
1
@AMC 我已经重新安装了很多次。我想找到一种方法,在不重做所有内容的情况下恢复一个良好的状态。 - endolith
2
@endolith 你为了解决同一个问题已经多次重新安装了吗?它是怎么出问题的?我们应该在其他地方讨论这个问题,我创建了一个聊天室 - AMC

7

永久更改

conda install python={version}

临时更改环境

查看您的环境

在终端窗口或Anaconda提示符中运行conda info --envs

如果它没有显示您想要安装的环境

运行conda create -n py36 python=3.6 anaconda,对于Python 3.6,请根据您的喜好更改版本

激活环境(使用Anaconda提示符)

运行activate envnme,其中envnme是通过此命令conda info --envs找到的。例如,当您运行conda info --envs时,它会显示:

base * C:\Users\DulangaHeshan\Anaconda3 py36 C:\Users\DulangaHeshan\Anaconda3\envs\py36

然后运行activate py36

要检查,请运行python --version

在Windows中,最好在激活另一个环境之前取消激活一个环境。 https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html?highlight=deactivate%20environment


16
我认为OP想要一个解决方案,可以将基础环境更改为py36,这样他们就不必在启动时每次运行"activate py36"了。 - Wassadamo

6

activate.py 是硬编码的,当您评估由 conda shell.zsh hook 生成的 shell 钩子时,它会发出 conda activate base\n 到您的 shell 配置文件中。

您可以通过以下方式抑制这个硬编码的 "自动激活 base":

conda config --set auto_activate_base false

然后,在~/.zshrc~/.bashrc或任何您从中获取shell配置文件的位置,您可以在conda shell hook之后附加以下内容,以明确地激活所选择的环境:

conda activate py34

3
在Windows上,创建一个批处理文件,并在其中添加以下内容:
start cmd /k "C:\Anaconda3\Scripts\activate.bat C:\Anaconda3 & activate env"

引号中的第一个路径是指 Anaconda 安装中 activate.bat 文件所在的路径。在您的系统上,该路径可能不同。紧随 activate 命令的名称,当然应该是您想要的环境名称。

需要打开 Anaconda 提示符时,请运行批处理文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接