2016-06-08 72 views
2

我在Ubuntu上安装了Jupyter Notebook。 Python 2和Python 3在终端上运行正常,但只有Python 3在IPython上显示。我正试图在IPython上使用两个内核(2和3)。将Python 2内核添加到Ipython

我试过从https://github.com/ipython/ipykernel手动安装ipykernel,但成功但仍无法获得Python 2内核显示。我也试过:

> sudo ipython2 kernelspec install-self 

,并得到了错误:ImportError: No module named shutil_get_terminal_size

接下来,我想:

python2 -m pip install --upgrade ipykernel 
python2 -m ipykernel install 

第二行返回了一个错误:

/usr/bin/python2: No module named shutil_get_terminal_size; 'ipykernel' is a package and cannot be directly executed 

我猜挑战在于名为的模块shutil_get_terminal_size。请,请告诉我如何解决这个问题。我看过这篇文章:https://github.com/ipython/ipython/issues/9416,但没有多大意义。

谢谢!

+0

不完全是答案,但为什么不为Python 2和Python 3使用单独的虚拟环境?这就是我所做的。 – seanmus

回答

1

我遇到了同样的问题,发现一个backports软件包被安装在Python 2.7系统站点目录的用户站点目录中。此外,backports.shutil_get_terminal_size包只有在系统网站目录中:

$ ls -l $(find/-name 'backports' 2>/dev/null) 
/root/.local/lib/python2.7/site-packages/backports: 
total 0 
drwxr-xr-x 1 root root 88 Aug 4 16:04 configparser 

/usr/lib/python2.7/site-packages/backports: 
total 8 
-rw-r--r-- 1 root root 75 Aug 4 17:58 __init__.py 
-rw-r--r-- 1 root root 267 Aug 4 17:58 __init__.pyc 
drwxr-xr-x 1 root root 128 Aug 4 17:58 shutil_get_terminal_size 

当Python执行的import声明,它会在用户的网站目录,然后再查找系统中的站点目录。由于shutil_get_terminal_size程序包不在用户站点目录中的backports程序包中,因此该导入将始终失败。下面是进口的错误看起来像其最小的形式:

$ echo "from backports.shutil_get_terminal_size import get_terminal_size; \ 
     print(get_terminal_size())" | python2 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ImportError: No module named shutil_get_terminal_size 

添加python命令行上-s选项告诉Python来使用用户的网站目录,并导入命令成功:

$ echo "from backports.shutil_get_terminal_size import get_terminal_size; \ 
     print(get_terminal_size())" | python2 -s 
terminal_size(columns=319, lines=104) 

$ python2 -s -m ipykernel install 
Installed kernelspec python2 in /usr/local/share/jupyter/kernels/python2 
:当 -s选项被添加到python命令行

install命令还成功

backports包如何进入用户网站目录首先仍然是一个谜。