不同环境下运行内核的笔记本电脑

我把自己搞得一团糟,救命!

我用 conda管理环境。直到最近,我只有一个 python2 jupyter 笔记本内核,但我决定拖着我自己踢和尖叫进入21世纪,并安装了 python3内核; 我忘了我是怎么做到的。

我的 main (anaconda) python 默认为2.7。

因此,我在这里,愉快地尝试使用漂亮的汤从我闪亮的新 python3内核,我似乎不能够做任何事情,以获得在任何环境下,它发现软件包。(全部来自笔记本) :

from bs4 import BeautifulSoup


-> ImportError: No module named 'bs4'

好吧,我会用贝壳魔法安装的,对吧? 对吧?

! pip install bs4


--> Collecting bs4
Downloading bs4-0.0.1.tar.gz
Requirement already satisfied (use --upgrade to upgrade): beautifulsoup4 in /Users/[MY-USER]/anaconda/lib/python2.7/site-packages (from bs4)
[...]
Successfully built bs4
Installing collected packages: bs4
Successfully installed bs4-0.0.1


from bs4 import BeautifulSoup


-> ImportError: No module named 'bs4'

哦,不。即使我运行的是 python3内核,它是否认为我在一个2.7的 env 中?不行。

! conda info --envs
--> # conda environments:
#
flaskenv                 /Users/[MY-USER]/anaconda/envs/flaskenv
mesa                     /Users/[MY-USER]/anaconda/envs/mesa
py35                     /Users/[MY-USER]/anaconda/envs/py35
root                  *  /Users/[MY-USER]/anaconda

好的,我可以修好,其中一个是3.5环。

! source activate py35
--> prepending /Users/[MY-USER]/anaconda/envs/py35/bin to PATH


! conda install beautifulsoup4
--> Fetching package metadata .......
Solving package specifications: ..........


# All requested packages already installed.
# packages in environment at /Users/[MY-USER]/anaconda:
#
beautifulsoup4            4.4.1                    py27_0

关于..。

! pip install bs4
--> Requirement already satisfied (use --upgrade to upgrade): bs4 in /Users/[MY-USER]/anaconda/lib/python2.7/site-packages

更关心的是..。

from bs4 import BeautifulSoup


-> ImportError: No module named 'bs4'

啊! ! !为了修复这个问题(并重新运行一些工作) ,我是否必须杀死内核?杀死内核有用吗?我如何让我的木星内核知道它应该在什么环境下运行?

谢谢!

61369 次浏览

这是 ipython/Jupiter 的一个棘手的部分。当您启动 jupyterNotebook 时,可用的内核集是独立于 Virtual alenv 的。诀窍是在您希望唯一地向 jupyter 标识自己的环境中设置 ipykernel 包。来自 多个 ipykernel 上的 docs,

source activate ENVNAME
pip install ipykernel
python -m ipykernel install --user --name ENVNAME --display-name "Python (whatever you want to call it)"

如果您只想在 conda 环境中使用一个 Python 3内核,那么只需使用 python -m ipykernel install --user,它就会将默认的 Python 重置为 viralenv 中的那个。

是的,您需要重新启动内核并重新运行前面的步骤。

参见 在 IPython Notebook 中同时使用 Python 2.x 和 Python 3.x

@ tschundler 的解决方案在您的环境已经创建的情况下完美工作。

如果您想在创建虚拟环境时更改默认内核并避免任何手动配置,只需在 conda 命令的末尾添加 jupyter:

conda create --name ENVNAME python=PYTHONVERSION jupyter

当您使用 ipython 或 jupyter 笔记本时,将使用正确的内核。

在我的例子中,jupyter 无法“选择”虚拟环境的 python,所以我必须编辑 ~/.local/share/jupyter/kernels/{my_env_name}/kernel.json 并向解释器添加路径

argv键。

这里也有一个简单的方法

workon my-virtualenv-name  # activate your virtualenv, if you haven't already
pip install tornado==4.5.3
pip install ipykernel==4.8.2

您现在应该能够在 IPython 笔记本菜单中看到您的内核: Kernel-> Change Kernel,并能够切换到它(您可能需要在页面出现在列表中之前刷新它)。从那时起,IPython 将记住该笔记本使用哪个内核。

这招对我管用 来源

pip install --user ipykernel
python -m ipykernel install --user --name=myenv


Output
Installed kernelspec myenv in /home/user/.local/share/jupyter/kernels/myenv

进入上面的目录 打开内核 Json

{
"argv": [
"/home/user/anaconda3/envs/myenv/bin/python", # path to your virtual environment python
"-m",
"ipykernel_launcher",
"-f",
"{connection_file}"
],
"display_name": "myenv",
"language": "python"
}

我知道这是一个老问题,但没有人提到 nb_conda_kernels,这是为了解决这个问题。您必须将它安装在启动运行笔记本的环境中,并且安装了内核/s 的任何其他环境(ipykernelr-irkernel等)都可以作为一个选项(启动首选内核) :

enter image description here

分享我的经验,以防有人犯同样的错误:

DR

在 VSCode 中,我从 Ubuntu 终端创建了虚拟环境,但是也忘了激活 WSL 扩展。一旦我激活了 WSL 扩展,我就可以把 Jupyterkernel 改成我的虚拟环境。

详细解释

我使用 VSCode 处理 WSL 扩展(参见 给你)。我在一个 Ubuntu 终端上创建了我的虚拟环境[创建了一个新的终端并选择了 Ubuntu (WSL)] ,然后到我的 Jupiter 笔记本上更改了我的内核,但是它没有出现在列表中。

我尝试在我的虚拟环境中将路径添加到 kernel.json 的 上述建议的解决方案,以适应我的情况(我不使用 conda) ,但是我惊讶地发现在我的环境中的文件夹 bin没有一个名为 python的文件。

解决方案是激活 WSL 扩展: 右下角 > 单击箭头(打开远程连接) > 重新打开 WSL 中的文件夹。

在这之后,我可以在浏览器中看到 bin文件夹中 PythonPython3的两个新条目(右边的箭头似乎表明它是 符号链接)。 虚拟环境现在显示了 Python 符号链接

然后,我去我的木星笔记本,并改变了我的虚拟环境的内核。

最后,我不必改变 kernel.json的路径。

PS: 以上是我对我的问题的理解和解决方案,考虑到我对 Linux 并不了解,所以任何补充或改进这个答案的意见都是非常欢迎的!