Anaconda 发行说明中的​​“PATH env var 的修剪值”是什么意思?

Göd*_*del 6 python path-variables anaconda

两天前,我在 Windows 计算机上卸载了“Anaconda3 5.2.0”并重新安装了“Anaconda3 2020.07”。按照安装者的建议,我去年安装Anaconda3 5.2.0或者前两天重新安装Anaconda3 2020.07时,系统path环境变量中没有添加Anaconda路径。当我从 Anaconda Prompt 使用 python 时一切顺利,因为 Prompt 已将 Anaconda 目录添加到path变量中。

但是,在 Anaconda Prompt 之外使用时,我发现 Anaconda3 5.2.0 和 Anaconda3 2020.07 之间存在奇怪的不同行为。我有一个bat包含一行的文件C:\Anaconda3\python xxx.py,并在xxx.py其中导入了几个 python 包,包括numpy. 我在使用Anaconda 5.2.0的时候,bat双击这个文件就可以成功执行(相当于C:\Anaconda3\python xxx.py在普通CMD中运行,不知道Anaconda路径)。但是,在我重新安装Anaconda3 2020.07后,DLL load failed运行该bat文件时出现错误,因为numpy无法成功导入该包。

我确定错误是由path变量引起的,我意识到在普通 CMD 中DLL load failed运行时出现错误应该是一个合理的结果,C:\Anaconda3\python xxx.py因为DLL如果没有将 Anaconda 目录添加到pathCMD 中的变量中,就无法找到该错误。

我的问题是为什么它可以在Anaconda 5.2.0下成功执行。Anaconda 5.2.0 有什么特别之处?为什么命令可以DLL在普通的CMD中找到那些文件?

然后我查看了Anaconda的发行说明。在Anaconda 5.2.0 部分下,我阅读了以下内容:

Windows 安装程序对 PATH env var 使用了一个精简的值,以避免现有软件的 DLL 地狱

我想这可能是原因。但我无法理解a trimmed down value for PATH env var. 有谁知道 Anaconda 5.2.0 如何处理path变量,以便 python 解释器DLL即使在普通 CMD 中的 Anaconda Prompt 之外也能找到正确的?


ps

DLL load failed错误不是特定于numpy包。我只是举个例子。

导入numpyxxx.py,错误是(最后一行):

Original error was: DLL load failed while importing _multiarry_umath: The specified module could not be found.

如果导入sqlite3xxx.py,错误的是(最后一行):

ImportError: DLL load failed while importing _sqlite3: %1 is not a valid Win32 application.

其他包也可能导致类似问题。关键是在 Anaconda Prompt 之外使用的 python 解释器(通过写完整路径C:\Anaconda3\python xxx.py,或者py xxx.py如果安装了 Python Launcher 则使用)可以DLL在 Anaconda3 5.2.0DLL下找到正确的,但在 Anaconda3 2020.07 下找不到正确的,尽管 Anaconda 目录path在这两种情况下都不会添加到系统变量中。


这是 的一个例子xxx.py

import numpy
import sqlite3
print('Hello World!')
Run Code Online (Sandbox Code Playgroud)

Tim*_*Tim 0

在这种情况下,精简可能意味着简化,以便更容易地找出为什么您的产品PATH无助于找到您需要的东西。