【问题标题】:Why doesn't Jupyter lab set required conda environment paths properly (IMHO)?为什么 Jupyter 实验室没有正确设置所需的 conda 环境路径(恕我直言)?
【发布时间】: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


    【解决方案1】:

    看起来像解决方案的是包nb_conda_kernels

    这需要安装在您激活的 conda 环境中才能运行 Jupyter Lab。

    然后,内核将在 Jupyter Lab 启动器中具有名称,例如 Python[conda env:spatial]。

    PATH 似乎设置正确并且 dll 加载正确。

    我的问题/困惑归结为我早先在 Jupyter Lab 中(在一定程度上)使用内核成功地仅使用...

    python -m ipykernel install
    

    不要这样做。它似乎只是部分有效(您的环境可能会运行,但您可能会遇到严重的问题 - 缺少 dll 等)。

    你仍然需要在你想在 Jupyer Lab 中使用的每个 conda 环境中安装 ipykernel 包,但依赖 nb_conda_kernels 包在 Jupyter Lab 启动时找到它们并显示它们(在 Jupyter Launcher 页面或可用内核下拉菜单上) .

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-30
      • 1970-01-01
      • 2021-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-01
      相关资源
      最近更新 更多