【问题标题】:What's the meaning of "a trimmed down value for PATH env var" in the Anaconda release notes?Anaconda 发行说明中的​​“PATH env var 的缩减值”是什么意思?
【发布时间】:2021-01-30 12:47:33
【问题描述】:

两天前,我在我的 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 之间存在奇怪的不同行为。我有一个包含单行C:\Anaconda3\python xxx.pybat 文件,在xxx.py 中我导入了几个python 包,包括numpy。在我使用Anaconda 5.2.0的时候,这个bat文件双击可以成功执行(相当于在不知道Anaconda路径的普通CMD中运行C:\Anaconda3\python xxx.py)。但是,在我重新安装 Anaconda3 2020.07 后,在运行此 bat 文件时出现 DLL load failed 错误,因为无法成功导入 numpy 包。

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

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

然后我检查了 Anaconda 的release notes。在Anaconda 5.2.0 part下,我读到了以下内容:

Windows 安装程序使用 PATH env var 的缩减值,以避免现有软件出现 DLL 地狱

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


附言

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

xxx.py中导入numpy时,错误为(最后一行):

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

如果在xxx.py 中导入sqlite3,则错误为(最后一行):

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

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


这是xxx.py 的示例。

import numpy
import sqlite3
print('Hello World!')

【问题讨论】:

  • 可能是您需要向路径添加更多文件夹吗?你的变量PATH 的内容是什么?
  • 我的 path 变量不包含任何 Anaconda 目录。因此,我预计在 CMD 中运行 C:\Anaconda3\python xxx.py 时会出现错误。
  • 您的问题是什么?是标题中的那个还是文本中间的那个?
  • @Tim 很抱歉让您感到困惑。我认为标题中的问题和文本中间的问题是相关的。理解“PATH env var 的缩减值”的含义可能有助于我理解为什么 Anaconda3 5.2.0 可以在 CMD 中找到 DLL。

标签: python anaconda path-variables


【解决方案1】:

在这种情况下,精简可能意味着简化,以便更容易找出为什么您的PATH 无法帮助您找到所需的内容。 p>

【讨论】:

  • 谢谢。那么这种简化如何使 Anaconda3 5.3.0 能够在 CMD 中找到相关的 DLL,其中没有将 Anaconda 目录添加到 path
  • 它没有,它让更容易:越少,缺少所需路径的情况就越明显。我想就是这样。
猜你喜欢
  • 1970-01-01
  • 2012-12-06
  • 2014-12-24
  • 2014-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-18
  • 1970-01-01
相关资源
最近更新 更多