“将 Anaconda 注册为我的默认 Python”是什么意思?

Mic*_*ael 9 python windows installation anaconda miniconda

在安装过程中(Windows操作系统)我有2个选择:

  • 将 Miniconda 添加到我的 PATH 环境变量中
  • 将 Miniconda 注册为我的默认 Python

第一个选项非常明显。我完全理解。但第二个呢?“登记”一词是什么意思

它创建带有字符串“好的我已经注册了你的Python”的文件还是什么?具体会进行哪些操作?太令人困惑了。我已阅读他们网站上的整个文档,但我找不到任何相关内容。

Jim*_*hen 5

我今天调查了这个问题并揭示了其中的秘密。您指的是以下 Anaconda 安装程序 UI,对吗?

Anaconda3 安装程序:将 Anaconda3 注册为我的默认 Python 3.9

我先给出我的结论。他说的是:

将 Anaconda3 注册为我的默认 Python 3.9

不是

将 Anaconda3 注册为我的默认 Python

这意味着,

  • 他无法确定哪个 Python 版本(3.5、3.8 或 3.9)将成为您的默认版本。
  • 他只能确定:如果Python Launcher(py.exe)在一次运行中确定应该使用3.9,那么py.exe应该选择Anaconda的Python 3.9实例。

我通过Anaconda3-2022.05-Windows-x86_64.exe一系列实验验证了我的结论。

EXP.0:准备

写一个t3.py内容:

#!/usr/bin/python3

import sys
print(sys.executable)
Run Code Online (Sandbox Code Playgroud)

运行时,它将向我们显示正在使用哪个 python.exe。

安装 python.org 官方(为简洁起见,简称为“官方”)python-3.5.4.exe,使用默认选项。我们会得到一个regkey

[HKCU\SOFTWARE\Python\ PythonCore \3.5-32]

并且 python.exe 位置已注册在那里。

Python 3.5 官方注册表键位置。

根据PEP-514PythonCore是 python.org 为自己选择的“公司名称”。

现在,运行t3.py,我们看到使用的是Python 3.5。

使用官方py35

EXP.1 : 在官方 3.5 上添加 Anaconda

现在,安装Anaconda,勾选“Register 3.9”选项,我将其安装到d:\Anaconda3. 然后我们看到创建了两个注册表项。

首先,[HKCU\SOFTWARE\Python\ContinuumAnalytics\Anaconda39-64]这标志着 Anaconda 自己的 Python 实例。

其次,[HKCU\SOFTWARE\Python\PythonCore\3.9]这假装安装了官方 Python 实例。因此,t3.py现在d:\anaconda3\python.exe使用说。

Anaconda 添加了 regkey

使用Anaconda py39

是的,如果我们没有勾选“Register 3.9”选项,则[HKCU\SOFTWARE\Python\PythonCore\3.9]不会创建regkey,因此 py.exe 不会选择 Anaconda 。

EXP.2 : 在官方 3.5 & 3.10 上添加 Anaconda

现在回到 EXP.0 状态——我个人使用 VM 并恢复到 EXP.0 快照。

我们安装官方的 python 3.10,然后安装 Anaconda ,仍然勾选“注册 3.9”选项。

那么会发生什么呢t3.py

答案是,

C:\Users\chj\AppData\Local\Programs\Python\ Python310 \python.exe

再次检查注册表,3.9(标记为橙色)节点仍然是由 Anaconda 安装程序创建的,但 py.exe 没有选择它作为默认版本。

显然,py.exe 选择了最新的版本号。

py.exe 选择最新版本号作为默认值

EXP.3:Anaconda 安装程序 BUG

事情还没有结束。如果我们已经有了官方的Python 3.9,并且我们进一步安装了Anaconda(提供了他自己的3.9),那么会发生什么?

Anaconda 首先会友好地提示我们他将覆盖 3.9 指针,根据 EXP.1 和 EXP.2 看起来相当合理。

Anaconda 警告覆盖 3.9 指针

然而,安装后t3.py显示默认的3.9仍然指向官方版本,Anaconda的覆盖并没有发生。嗯,显然,这是BUGGY。