【发布时间】:2021-07-02 12:16:27
【问题描述】:
为了简化和改进我的 Python 体验,我使用 conda 来管理环境并在它们之间切换。此外,我使用 Jupyter Lab 和多个 python 内核,每个内核都有不同的包集。
考虑一下这组简单的环境...
(base) PS C:\Users\xxx> conda env list
# conda environments:
#
base * C:\Users\xxx\Miniconda3
jupyter C:\Users\xxx\Miniconda3\envs\jupyter
spatial C:\Users\xxx\Miniconda3\envs\spatial
环境 jupyter 安装了 jupyter 包(几乎没有其他),空间包含所有有用的东西,如 numpy、scipy 等和 ipykernel,并已注册为 Jupyter 的内核。
我在 powershell 中激活 jupyter 环境,选择空间内核并打开一个笔记本。
一切都很好,直到我尝试导入 numpy 时我得到一个 dll 无法加载(以及很多关于如何修复它的建议,但我认为原因很简单,如果难以修复)。
所以我在 powershell 中运行相同的 conda 环境并尝试导入 numpy;没什么,一切都很好。
那么会发生什么……
当 conda 切换 python 环境时,它会重写 PATH 环境变量,以便启动的 python 进程来自该环境,然后它可以看到 numpy dll(或您可能想要的任何其他包 dll)的正确路径.
当我在 powershell 中激活我的“空间”环境并偷偷查看 PATH 时,我在顶部看到了这个...
(spatial) PS C:\Users\xxx> $env:PATH -split ";"
C:\Users\xxx\Miniconda3\envs\spatial
C:\Users\xxx\Miniconda3\envs\spatial\Library\mingw-w64\bin
C:\Users\xxx\Miniconda3\envs\spatial\Library\usr\bin
C:\Users\xxx\Miniconda3\envs\spatial\Library\bin
C:\Users\xxx\Miniconda3\envs\spatial\Scripts
C:\Users\xxx\Miniconda3\envs\spatial\bin
C:\Users\xxx\Miniconda3\condabin
C:\Windows\system32
在 PATH 中的任何位置都没有提及 Jupyter 环境。
但是,如果我在 Jupyter 中运行时查看 python 环境“空间”中的 PATH(os.environ['PATH'].split(';') not sys.path),我见...
['C:\\Users\\xxx\\Miniconda3\\envs\\jupyter',
'C:\\Users\\xxx\\Miniconda3\\envs\\jupyter\\Library\\mingw-w64\\bin',
'C:\\Users\\xxx\\Miniconda3\\envs\\jupyter\\Library\\usr\\bin',
'C:\\Users\\xxx\\Miniconda3\\envs\\jupyter\\Library\\bin',
'C:\\Users\\xxx\\Miniconda3\\envs\\jupyter\\Scripts',
'C:\\Users\\xxx\\Miniconda3\\envs\\jupyter\\bin',
'C:\\Users\\xxx\\Miniconda3\\condabin',
'C:\\Windows\\system32',
'C:\\Windows'
除了 Jupyter 环境本身之外,没有任何 dll 的路径。所以 numpy 找不到它的 dll。
这意味着您不能在需要 dll 的 Jupyter Lab 内运行的单独 python 环境中拥有包。或者更确切地说,您需要在运行 Jupyter Lab 的 conda 环境中安装所有这些软件包及其 dll,作为您需要在其中使用它们的环境。因此,例如,您不能在不同的环境中拥有两个版本的 numpy(除非幸运的是 dll都是一样的)。
我错过了什么?
【问题讨论】:
标签: python conda jupyter-lab