不同环境中的 jupyter notebook 运行 内核
jupyter notebook running kernel in different env
我陷入了某种可怕的 virtualenv 混乱之中。帮忙?!
我使用 conda
管理环境。直到最近,我只有一个 python2 jupyter notebook 内核,但我决定把自己踢着尖叫着拖进 21 世纪,并安装了一个 python3 内核;我忘了我是怎么做到的。
我的主要(anaconda)python 默认为 2.7。
所以我在这里,愉快地尝试使用我闪亮的新 python3 内核中的漂亮汤,但我似乎无法做任何事情来获取它在其中查找包的任何环境。 Viz(全部来自笔记本):
from bs4 import BeautifulSoup
-> ImportError: No module named 'bs4'
好的,好的,我会使用 shell 魔法安装它。正确的?正确的?
! 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 环境中?那不行。
! 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'
啊!!! headdesk 我是否必须杀死内核才能修复此问题(并重新运行 一些工作)?杀死内核甚至会起作用吗?我如何让我的 jupyter 内核知道它应该在什么环境下 运行ning?
谢谢!
这是 ipython/Jupyter 的棘手部分。可用的内核集与启动 jupyter Notebook 时的 virtualenv 无关。诀窍是在您希望 jupyter 唯一标识自己的环境中设置 ipykernel 包。来自 docs on multiple ipykernels、
source activate ENVNAME
pip install ipykernel
python -m ipykernel install --user --name ENVNAME --display-name "Python (whatever you want to call it)"
如果你只想拥有一个 Python 3 内核,在 conda 环境中,只需使用 python -m ipykernel install --user
它将默认 python 重置为 virtualenv 中的内核.
是的,您需要重新启动内核并重新运行之前的步骤。
另见
如果您的环境已经创建,@tschundler 的解决方案将完美运行。
如果您想在创建虚拟环境时更改默认内核并避免任何手动配置,只需在 conda 命令末尾添加 jupyter
:
conda create --name ENVNAME python=PYTHONVERSION jupyter
当您使用 ipython 或 jupyter notebook 时,将使用正确的内核。
在我的例子中,jupyter 无法 'pick' 虚拟环境的 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 笔记本菜单中看到您的内核:内核 -> 更改内核并能够切换到它(您可能需要刷新页面才能出现在列表中). IPython 以后会记住该笔记本使用哪个内核。
这对我有用。 source
pip install --user ipykernel
python -m ipykernel install --user --name=myenv
Output
Installed kernelspec myenv in /home/user/.local/share/jupyter/kernels/myenv
然后转到上面的目录
打开 kernel.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"
}
我陷入了某种可怕的 virtualenv 混乱之中。帮忙?!
我使用 conda
管理环境。直到最近,我只有一个 python2 jupyter notebook 内核,但我决定把自己踢着尖叫着拖进 21 世纪,并安装了一个 python3 内核;我忘了我是怎么做到的。
我的主要(anaconda)python 默认为 2.7。
所以我在这里,愉快地尝试使用我闪亮的新 python3 内核中的漂亮汤,但我似乎无法做任何事情来获取它在其中查找包的任何环境。 Viz(全部来自笔记本):
from bs4 import BeautifulSoup
-> ImportError: No module named 'bs4'
好的,好的,我会使用 shell 魔法安装它。正确的?正确的?
! 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 环境中?那不行。
! 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'
啊!!! headdesk 我是否必须杀死内核才能修复此问题(并重新运行 一些工作)?杀死内核甚至会起作用吗?我如何让我的 jupyter 内核知道它应该在什么环境下 运行ning?
谢谢!
这是 ipython/Jupyter 的棘手部分。可用的内核集与启动 jupyter Notebook 时的 virtualenv 无关。诀窍是在您希望 jupyter 唯一标识自己的环境中设置 ipykernel 包。来自 docs on multiple ipykernels、
source activate ENVNAME
pip install ipykernel
python -m ipykernel install --user --name ENVNAME --display-name "Python (whatever you want to call it)"
如果你只想拥有一个 Python 3 内核,在 conda 环境中,只需使用 python -m ipykernel install --user
它将默认 python 重置为 virtualenv 中的内核.
是的,您需要重新启动内核并重新运行之前的步骤。
另见
如果您的环境已经创建,@tschundler 的解决方案将完美运行。
如果您想在创建虚拟环境时更改默认内核并避免任何手动配置,只需在 conda 命令末尾添加 jupyter
:
conda create --name ENVNAME python=PYTHONVERSION jupyter
当您使用 ipython 或 jupyter notebook 时,将使用正确的内核。
在我的例子中,jupyter 无法 'pick' 虚拟环境的 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 笔记本菜单中看到您的内核:内核 -> 更改内核并能够切换到它(您可能需要刷新页面才能出现在列表中). IPython 以后会记住该笔记本使用哪个内核。
这对我有用。 source
pip install --user ipykernel
python -m ipykernel install --user --name=myenv
Output
Installed kernelspec myenv in /home/user/.local/share/jupyter/kernels/myenv
然后转到上面的目录 打开 kernel.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"
}