Jupyter 无法启动,"ImportError: This package should not be accessible"



我无法在linux机器上启动Jupyter笔记本服务器。当我键入jupyter notebook时,我会得到以下错误:

ImportError: This package should not be accessible on Python 3. Either you are trying to run from the python-future src folder or your installation of python-future is corrupted.
During handling of the above exception, another exception occurred:
ModuleNotFoundError: No module named 'urlparse'

这里有一些系统信息,如果有其他有用的信息,请告诉我:

$ jupyter --version
4.4.0
$ which jupyter
/usr/bin/jupyter
$ which python
/usr/bin/python
$ which python3
/usr/bin/python3
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.1 LTS"
$ cat /proc/version
Linux version 4.15.0-38-generic (buildd@lcy01-amd64-023) (gcc version 7.3.0 (Ubuntu 7.3.0-16ubuntu3)) #41-Ubuntu SMP Wed Oct 10 10:59:38 UTC 2018
$ pip3 --version
pip 9.0.1 from /usr/local/lib/python3.6/dist-packages (python 3.6)

当我尝试python2 -m pip install urlparse --user时,我得到一个错误:Collecting urlparse Could not find a version that satisfies the requirement

报告的错误类似于此处显示的错误,但所述创建和使用python3虚拟环境的解决方案似乎并没有立即修复jupyter notebook命令,尽管它确实用指向虚拟环境的链接替换了pythonpython3可执行文件:

(env) $ which jupyter
/usr/bin/jupyter
(env) $ which python
/home/.../env/bin/python
(env) $ which python3
/home/.../env/bin/python3

如果对python路径有一些疑问,下面是python 2的路径:

$ ipython
...
In [2]: sys.path
Out[2]: 
['/usr/lib/python2.7',
'/usr/lib/python2.7/plat-x86_64-linux-gnu',
'/usr/lib/python2.7/lib-tk',
'/usr/lib/python2.7/lib-old',
'/usr/lib/python2.7/lib-dynload',
'/home/$USER/.local/lib/python2.7/site-packages',
'/usr/local/lib/python2.7/dist-packages',
'/usr/lib/python2.7/dist-packages',
'/usr/lib/python2.7/dist-packages/gtk-2.0',
'/home/$USER/.local/lib/python2.7/site-packages/IPython/extensions',
'/home/$USER/.ipython']

对于蟒蛇3

$ ipython3
...
In [2]: sys.path                                                                                                                                 
Out[2]: 
['/usr/lib/python36.zip',
'/usr/lib/python3.6',
'/usr/lib/python3.6/lib-dynload',
'/home/$USER/.local/lib/python3.6/site-packages',
'/usr/local/lib/python3.6/dist-packages',
'/usr/lib/python3/dist-packages',
'/home/$USER/.local/lib/python3.6/site-packages/IPython/extensions',
'/home/$USER/.ipython']

启动Jupyter时第一个错误的完整堆栈跟踪是:

Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/notebook/nbextensions.py", line 18, in <module>
from urllib.request import urlretrieve
File "/usr/lib/python3.6/urllib/request.py", line 88, in <module>
import http.client
File "/home/$USER/.local/lib/python3.6/site-packages/http/__init__.py", line 7, in <module>
raise ImportError('This package should not be accessible on Python 3. '
ImportError: This package should not be accessible on Python 3. Either you are trying to run from the python-future src folder or your installation of python-future is corrupted.

/usr/bin/jupyter的内容如下:

$ cat `which jupyter`
#!/usr/bin/python3
# EASY-INSTALL-ENTRY-SCRIPT: 'jupyter-core==4.4.0','console_scripts','jupyter'
__requires__ = 'jupyter-core==4.4.0'
import re
import sys
from pkg_resources import load_entry_point
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script.pyw?|.exe)?$', '', sys.argv[0])
sys.exit(
load_entry_point('jupyter-core==4.4.0', 'console_scripts', 'jupyter')()
)

一个建议的答案是存在一个伪造的http库,">它恰好被/home/$USER/.local/lib/python3.6/site packages/http上的某个第三方模块"http"覆盖。"当我手动删除此库时,我现在在导入site模块时遇到错误,如下所示:

$ cd /home/$USER/.local/lib/python3.6/site-packages
$ mv ./http ~/Desktop/python_disabled/python3/
$ jupyter notebook
Error processing line 1 of /home/$USER/.local/lib/python3.6/site-packages/lazr.restfulclient-0.14.0-py3.6-nspkg.pth:
Failed to import the site module
Traceback (most recent call last):
File "/usr/lib/python3.6/site.py", line 174, in addpackage
exec(line)
File "<string>", line 1, in <module>
File "/usr/lib/python3.6/types.py", line 171, in <module>
import functools as _functools
File "/usr/lib/python3.6/functools.py", line 21, in <module>
from collections import namedtuple
File "/usr/lib/python3.6/collections/__init__.py", line 32, in <module>
from reprlib import recursive_repr as _recursive_repr
File "/home/$USER/.local/lib/python3.6/site-packages/reprlib/__init__.py", line 7, in <module>
raise ImportError('This package should not be accessible on Python 3. '
ImportError: This package should not be accessible on Python 3. Either you are trying to run from the python-future src folder or your installation of python-future is corrupted.

此部分错误:

File "/usr/lib/python3.6/urllib/request.py", line 88, in <module>
import http.client
File "/home/$USER/.local/lib/python3.6/site-packages/http/__init__.py", line 7, in <module>
raise ImportError('This package should not be accessible on Python 3. '

标准模块尝试导入http.client,这也是一个标准模块。在您的安装中,它恰好被/home/$USER/.local/lib/python3.6/site-packages/http上的某个第三方模块"http"覆盖。

拆下第三方模块。


根据您更新的问题中卸载httpreprlib软件包的相同问题判断,您似乎在/home/$USER/.local/lib/python3.6中安装了micropython-lib软件包集由于它们很多,所以只删除整个目录更容易我不知道它们是如何到达那里的,因为它们不仅与常规的CPython安装不兼容,而且与一般的Python3不兼容。


最后,请注意,根据您的需要,使用virtualenv可能是比pip --user更易于管理的解决方案。

相关内容

最新更新