Python 为什么Jupyter实验室不能正确设置所需的conda环境路径(IMHO)?

Python 为什么Jupyter实验室不能正确设置所需的conda环境路径(IMHO)?,python,conda,jupyter-lab,Python,Conda,Jupyter Lab,为了简化和改进我的python体验,我使用conda来管理环境并在它们之间切换。此外,我使用Jupyter Lab和多个python内核,每个内核都有不同的包集 考虑一下这组简单的环境 (base) PS C:\Users\xxx> conda env list # conda environments: # base * C:\Users\xxx\Miniconda3 jupyter C:\Users\xxx\Mini

为了简化和改进我的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包,几乎没有其他内容,spatial包含了所有有用的东西,如numpy、scipy等和ipykernel,并已注册为jupyter的内核

我在powershell中激活jupyter环境,选择spatial内核并打开笔记本

一切都很好,直到我尝试导入numpy,在那里我得到了一个无法加载的dll和很多关于如何修复它的建议,但我认为原因很简单,如果很难修复的话

因此,我在powershell中运行相同的conda环境,并尝试导入numpy;没什么,一切都好

那么发生了什么

当conda切换python环境时,它会重写PATH环境变量,以便启动的python进程来自该环境,然后它可以看到numpy DLL或您可能需要的任何其他包DLL的正确路径

当我在powershell中激活我的“空间”环境并偷偷查看路径时,我在顶部看到了这个

(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
在这条路的任何地方都没有提到Jupyter环境

但是,如果我查看路径os.environ['PATH'].split';'在Jupyter中运行时,python环境“spatial”中的not sys.path我看到

除了Jupyter环境本身之外,任何地方都没有指向任何dll的路径。所以numpy找不到它的DLL

这意味着您不能在Jupyter实验室内运行需要DLL的单独python环境中的包。或者更确切地说,您需要在运行Jupyter Lab的conda环境以及您需要在其中使用它们的环境中安装所有这些软件包及其DLL。因此,例如,您不能在不同的环境中拥有两个版本的numpy,除非幸运的是DLL都是相同的


我缺少什么?

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

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

内核将在Jupyter实验室启动器中有名称,比如Python[conda env:spatial]

路径似乎设置正确,DLL加载正确

我的问题/困惑是由于我早期的成功,只使用了

python -m ipykernel install
不要这样做。这似乎只是部分有效,您的环境可能会运行,但您可能会遇到严重的问题-缺少DLL等

您仍然需要在Jupyer Lab中要使用的每个conda环境中安装ipykernel包,但在Jupyter Lab启动时,依靠nb_conda_内核包查找它们,并在Jupyter启动器页面或可用内核下拉列表中显示它们

python -m ipykernel install