简体   繁体   English

Jupyter无法启动,“ ImportError:此程序包不可访问”

[英]Jupyter cannot start, “ImportError: This package should not be accessible”

I am unable to start a Jupyter notebook server on a linux machine. 我无法在Linux机器上启动Jupyter笔记本服务器。 When I type jupyter notebook , I get the following errors: 键入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'

Here is some system info, let me know if anything else might be helpful: 这是一些系统信息,如果有其他帮助,请告诉我:

$ 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)

When I try python2 -m pip install urlparse --user , I get an error: Collecting urlparse Could not find a version that satisfies the requirement 当我尝试python2 -m pip install urlparse --user ,出现错误: Collecting urlparse Could not find a version that satisfies the requirement

The reported error resembles the one shown here , but the stated solution of creating and using a python3 virtual environment doesn't seem to immediately fix the jupyter notebook command, although it does replace python and python3 executable with links to the virtual environment: 报告的错误与此处显示的错误相似,但是创建和使用python3虚拟环境的既定解决方案似乎无法立即修复jupyter notebook命令,尽管它确实将pythonpython3可执行文件替换为虚拟环境的链接:

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

In case there is some question about the python path, here is the path for python 2: 如果有关于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']

And for python3 对于python3

$ 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']

The full stack trace of the first error when starting Jupyter is: 启动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.

The contents of /usr/bin/jupyter are as follows: /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')()
    )

One suggested answer is that there is a spurious http library, " it happens to be overridden by some 3rd-party module "http" at /home/$USER/.local/lib/python3.6/site-packages/http ". 一个建议的答案是存在一个伪造的http库,“ 它恰好被/home/$USER/.local/lib/python3.6/site-packages/http中的一些第三方模块” http”覆盖 When I remove this library manually, I now get an error importing the site module, as follows: 当我手动删除该库时,现在出现导入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.

This part is wrong: 这部分是错误的:

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

A standard module tries to import http.client , also a standard module . 标准模块尝试导入http.client ,这也是标准模块 And in your installation, it happens to be overridden by some 3rd-party module " http " at /home/$USER/.local/lib/python3.6/site-packages/http . 并且在您的安装中,它恰好被/home/$USER/.local/lib/python3.6/site-packages/http某些第三方模块“ http/home/$USER/.local/lib/python3.6/site-packages/http

Remove that 3rd-party module. 删除该第三方模块。


Judging by the same problem with reprlib package after uninstalling http in your updated question, you seem to have the micropython-lib set of packages installed in /home/$USER/.local/lib/python3.6 . 从更新问题中的http卸载后, reprlib软件包的相同问题判断,您似乎micropython-lib安装micropython-lib软件包 /home/$USER/.local/lib/python3.6 Since there are lots of them, it's easier to just delete the entire directory. 由于它们很多,因此删除整个目录会更容易。 I've no idea how they ended up there since they are not only incompatible with a regular CPython installation but with Python 3 in general. 我不知道它们如何结束,因为它们不仅与常规的CPython安装不兼容,而且与一般的Python 3不兼容。


Finally, note that depending on your needs, using virtualenv may be a more manageable solution than pip --user . 最后,请注意, 根据您的需求,使用virtualenv可能比pip --user更加易于管理。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM