jupyter笔记本在不同的环境中运行内核

时间:2016-06-17 23:08:23

标签: python packages jupyter conda virtual-environment

我已经陷入了某种可怕的虚弱的混乱局面。帮助?!

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

我的主要(anaconda)python默认为2.7。

所以在这里,我很乐意尝试在我闪亮的新python3内核中使用美丽的汤,而且我似乎无法做任何事情来找到它所找到的包裹的任何环境。 Viz(全部来自笔记本):

from bs4 import BeautifulSoup 

-> ImportError: No module named 'bs4'

好的,好的,我将使用shell magic安装它。对?对?

! 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'

ARRGH !!! headdesk 我是否必须杀死内核以解决这个问题(并重新运行一些工作)?杀死内核甚至会起作用吗?如何让我的jupyter内核知道它应该在什么环境下运行?

谢谢!

5 个答案:

答案 0 :(得分:96)

这是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中的那个。

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

另见Using both Python 2.x and Python 3.x in IPython Notebook

答案 1 :(得分:7)

如果您的环境已经创建,@ tschundler的解决方案可以完美运行。

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

conda create --name ENVNAME python=PYTHONVERSION jupyter

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

答案 2 :(得分:1)

这里还有一种简单的方法

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

答案 3 :(得分:0)

就我而言,jupyter无法以某种方式“拾取”虚拟环境的python。所以我不得不编辑~/.local/share/jupyter/kernels/{my_env_name}/kernel.json 并添加解释器的路径

argv键中。

答案 4 :(得分:0)

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"
}