Jupyter笔记本、错误的sys.path和sys.executable

18

我试图在Jupyter Notebook中使用Anaconda发行版的Python库,但是当我运行笔记本时,由于Python路径设置为来自Mac OS X 10.11的默认发行版,因此一直出现ImportError。

当我打印出sys.path和sys.executable时,与运行Python时不同于运行Jupyter Notebook。例如,

from pprint import pprint as p
import sys

p(sys.path)

在使用Python进行此操作后,我得到了正确的输出:

['',
 '/Users/glennraskovich/anaconda2/lib/python27.zip',
 '/Users/glennraskovich/anaconda2/lib/python2.7',
 '/Users/glennraskovich/anaconda2/lib/python2.7/plat-darwin',
 '/Users/glennraskovich/anaconda2/lib/python2.7/plat-mac',
 '/Users/glennraskovich/anaconda2/lib/python2.7/plat-mac/lib-scriptpackages',
 '/Users/glennraskovich/anaconda2/lib/python2.7/lib-tk',
 '/Users/glennraskovich/anaconda2/lib/python2.7/lib-old',
 '/Users/glennraskovich/anaconda2/lib/python2.7/lib-dynload',
 '/Users/glennraskovich/anaconda2/lib/python2.7/site-packages',
 '/Users/glennraskovich/anaconda2/lib/python2.7/site-packages/aeosa']

但是在Jupyter笔记本中运行时,我得到了:

['',
 '/usr/local/lib/python2.7/site-packages/dask-0.11.0-py2.7.egg',
 '/usr/local/lib/python2.7/site-packages/networkx-1.11-py2.7.egg',
 '/usr/local/lib/python2.7/site-packages/six-1.10.0-py2.7.egg',
 '/usr/local/lib/python2.7/site-packages/Pillow-3.3.1-py2.7-macosx-10.11-x86_64.egg',
 '/usr/local/Cellar/python/2.7.12/Frameworks/Python.framework/Versions/2.7/lib/python27.zip',
 '/usr/local/Cellar/python/2.7.12/Frameworks/Python.framework/Versions/2.7/lib/python2.7',
 '/usr/local/Cellar/python/2.7.12/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin',
 '/usr/local/Cellar/python/2.7.12/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac',
 '/usr/local/Cellar/python/2.7.12/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages',
 '/usr/local/Cellar/python/2.7.12/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk',
 '/usr/local/Cellar/python/2.7.12/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old',
 '/usr/local/Cellar/python/2.7.12/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload',
 '/usr/local/lib/python2.7/site-packages',
 '/Library/Python/2.7/site-packages',
 '/usr/local/lib/python2.7/site-packages/IPython/extensions',
 '/Users/glennraskovich/.ipython']

关于sys.executable:

p(sys.executable)
在Python中,正确的输出:
/Users/glennraskovich/anaconda2/bin/python

但是在jupyter notebook中,sys.executable没有设置为Anaconda版本。

/usr/local/opt/python/bin/python2.7

我尝试在我的 .bashrc 和 .bash_profile 中设置 PATH,使用命令 which python、which jupyter 等显示了 Anaconda 的路径,但 Jupyter Notebook 没有使用 Anaconda 的路径。这里可能出了什么问题?


你把 notebook 服务器的 sys.path 和你正在运行的内核的 sys.path 搞混了。 - Matt
那么我需要改变内核的sys.path吗?我该怎么解决这个问题? - Glenn Raskovich
4个回答

17

我找到了解决方案,因为内核设置为使用默认的Mac OS X Python版本,所以我使用以下命令进行修复:

python2 -m pip install ipykernel

python2 -m ipykernel install --user


1
注意: 第二步中的 --user 非常重要。我尝试了第二个步骤,没有使用 --user,而是使用了 sudo,但它没有起作用,因为它将 kernelspec 放到了不同的目录中(在 Windows 10 上,通过 WSL 运行 Ubuntu)。 - Robert Yi
我可以验证这也修复了virtualenv上的问题。 我使用已激活的venv“python”。 这是唯一对我有效的解决方案。 感谢@Glenn Raskovich。 - mork

3

对我而言,在创建环境后,我安装了Jupyter,但是接下来我尝试运行从基本环境安装的模块。通过 "jupyter kernelspec list"(https://github.com/jupyter/notebook/issues/2563),我发现我的 kernel.json 位于 C:\Users\username\Anaconda37\share\jupyter\kernels\python3\kernel.json,并指向工作环境中的 python.exe。更改路径解决了问题。

是有关Python路径设置的详细说明。


0

我的经验:

我在Windows上有一个conda虚拟环境,并将其链接为Jupyter Notebook的内核。但是,sys.executable指向全局Python安装可执行文件。

执行@Glenn答案中的步骤没有帮助解决问题。为了解决它:

  1. 找到你的环境的可执行python.exe。我的在C:\Users\youruser\miniconda3\envs\my_conda_environment\python.exe内。
  2. 找到位于C:\Users\youruser\AppData\Roaming\jupyter\kernels\yourkernel\kernel.json内的环境的kernel.json配置文件。
  3. 修改kernel.json配置路径,用步骤1中的路径替换现有的可执行路径。

重新启动Jupyter,问题解决!


0
我在使用Anaconda Navigator和命令行时遇到了这个问题。我在控制台中键入“source activate”然后使用Anaconda Navigator打开了Jupyter。但是,在Anaconda Navigator中,我不在正确的环境中,这导致了问题。这是因为Anaconda Navigator带有自己的虚拟环境激活(当您单击它们时)。因此,您需要从控制台激活虚拟环境,然后从控制台启动Jupyter,或者您需要在Anaconda Navigator中激活虚拟环境并从Navigator启动Jupyter。两种方法都可以,但不能组合使用。 :-)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接