Ipython: 没有名为 shutil_get_terminal_size 的模块

创建于 2016-06-23  ·  71评论  ·  资料来源: ipython/ipython

再会,
我正在为一个在 ipykernel 之上创建内核的小项目做出贡献。 自从我接触它已经有一段时间了,今天当我通过安装 Jupyter 部署一个新的开发环境时,我在调用 ipykernel 时得到了以下堆栈跟踪:

  File "<path to python>/lib/python2.7/site-packages/ipykernel-4.3.1-py2.7.egg/ipykernel/__init__.py", line 2, in <module>
    from .connect import *
  File "<path to python>/lib/python2.7/site-packages/ipykernel-4.3.1-py2.7.egg/ipykernel/connect.py", line 13, in <module>
    from IPython.core.profiledir import ProfileDir
  File "<path to python>/lib/python2.7/site-packages/ipython-5.0.0b4-py2.7.egg/IPython/__init__.py", line 48, in <module>
    from .core.application import Application
  File "<path to python>/lib/python2.7/site-packages/ipython-5.0.0b4-py2.7.egg/IPython/core/application.py", line 24, in <module>
    from IPython.core import release, crashhandler
  File "<path to python>/lib/python2.7/site-packages/ipython-5.0.0b4-py2.7.egg/IPython/core/crashhandler.py", line 28, in <module>
    from IPython.core import ultratb
  File "<path to python>/lib/python2.7/site-packages/ipython-5.0.0b4-py2.7.egg/IPython/core/ultratb.py", line 126, in <module>
    from IPython.utils.terminal import get_terminal_size
  File "<path to python>/lib/python2.7/site-packages/ipython-5.0.0b4-py2.7.egg/IPython/utils/terminal.py", line 22, in <module>
    from backports.shutil_get_terminal_size import get_terminal_size as _get_terminal_size
ImportError: No module named shutil_get_terminal_size

显然自从我上次使用 IPython 和 ipykernel 以来发生了一些变化。 知道问题是什么吗? 我正在使用 Python 2.7.10 处理 OSX 机器。

最好的,奥雷利安

最有用的评论

看起来您已经安装了 IPython 而没有以某种方式获取其依赖项。 鉴于我看到了鸡蛋,这可能意味着您的 setuptools 版本太旧,并且可能正在使用easy_install 。 首先,请确保您拥有相对较新的 pip/setuptools:

pip install --upgrade setuptools pip

然后,尝试使用 pip 重新安装 IPython(永远不要使用 easy_install,除非您知道 pip 无法/无法工作的充分理由。这些情况很少见):

pip uninstall ipython
pip install ipython

所有71条评论

看起来您已经安装了 IPython 而没有以某种方式获取其依赖项。 鉴于我看到了鸡蛋,这可能意味着您的 setuptools 版本太旧,并且可能正在使用easy_install 。 首先,请确保您拥有相对较新的 pip/setuptools:

pip install --upgrade setuptools pip

然后,尝试使用 pip 重新安装 IPython(永远不要使用 easy_install,除非您知道 pip 无法/无法工作的充分理由。这些情况很少见):

pip uninstall ipython
pip install ipython

特别是在这种情况下,我们添加了对包backports.shutil_get_terminal_size的依赖。

感谢您的快速反馈! 然而,谜团越来越深。 看起来通过命令行上的pip安装 Jupyter 产生的结果与使用setuptools时将不同。 虽然第一种方法成功了,但第二种方法对我来说却失败了。 以下是重现此问题的步骤:

首先,我们从一个准系统 Python 2.7.11 解释器开始,只安装了三个包:

$ pip list
pip (8.1.2)
setuptools (23.1.0)
virtualenv (15.0.2)

如果我使用pip安装 Jupyter 一切正常,我会得到以下包:

$ pip install jupyter
<long output>
$ pip list
appnope (0.1.0)
backports-abc (0.4)
backports.shutil-get-terminal-size (1.0.0)
backports.ssl-match-hostname (3.5.0.1)
certifi (2016.2.28)
configparser (3.5.0)
decorator (4.0.10)
entrypoints (0.2.2)
functools32 (3.2.3.post2)
gnureadline (6.3.3)
ipykernel (4.3.1)
ipython (4.2.0)
ipython-genutils (0.1.0)
ipywidgets (5.1.5)
Jinja2 (2.8)
jsonschema (2.5.1)
jupyter (1.0.0)
jupyter-client (4.3.0)
jupyter-console (4.1.1)
jupyter-core (4.1.0)
MarkupSafe (0.23)
mistune (0.7.2)
nbconvert (4.2.0)
nbformat (4.0.1)
notebook (4.2.1)
pathlib2 (2.1.0)
pexpect (4.1.0)
pickleshare (0.7.2)
pip (8.1.2)
ptyprocess (0.5.1)
Pygments (2.1.3)
pyzmq (15.2.0)
qtconsole (4.2.1)
setuptools (23.1.0)
simplegeneric (0.8.1)
singledispatch (3.4.0.3)
six (1.10.0)
terminado (0.6)
tornado (4.3)
traitlets (4.2.1)
wheel (0.29.0)
widgetsnbextension (1.2.3)

但是,如果我尝试通过使用以下setup.py脚本来安装 Jupyter 作为项目的要求(请注意,我从带有三个基本模块的全新 2.7.11 解释器重新启动pipsetuptoolsvirtualenv ):

#!/usr/bin/env python
import setuptools
setuptools.setup(
    ...
    install_requires = [
        "jupyter"],
   ...

......然后它失败了:

$ pip list
pip (8.1.2)
setuptools (23.1.0)
virtualenv (15.0.2)
$ ./setup.py install
<long output>
Searching for entrypoints
Reading https://pypi.python.org/simple/entrypoints/
No local packages or download links found for entrypoints
error: Could not find suitable distribution for Requirement.parse('entrypoints')
make: *** [install] Error 1

有趣的是,当列出 _did_ 安装的软件包时,我们可以看到ipythonjupyter-console现在分别是 5.0.0b4 和 5.0.0b1 版本,而不是上面的 4.2.0 和 4.1.1使用pip安装 Jupyter 时。 这里是包:

$ pip list
ipykernel (4.3.1)
ipython (5.0.0b4)
ipywidgets (5.1.5)
jupyter (1.0.0)
jupyter-client (4.3.0)
jupyter-console (5.0.0b1)
nbconvert (4.2.0)
notebook (4.2.1)
pip (8.1.2)
qtconsole (4.2.1)
setuptools (23.1.0)
tornado (4.3)
traitlets (4.2.1)
wheel (0.29.0)
widgetsnbextension (1.2.3)

我可能在这里遗漏了一些东西,但我不确定是什么。 知道为什么将jupyter作为setuptools 驱动的setup.py脚本中的依赖项在这里失败吗?

最好的事物,
奥雷连

这表明 setuptools 在导入时可能会获得与 pip 列出的版本不同的版本(由旧 setuptools 引起的已知错误)。 你从中得到什么:

python -c 'import setuptools; print(setuptools, setuptools.__version__)'

并且:

python -m site

如果您在 setup.py 中使用 setuptools,那么您可能不熟悉这一点,您永远不应该执行python setup.py install ,而应该只执行pip install .

以下是输出:

$ python -c 'import setuptools; print(setuptools, setuptools.__version__)'
(<module 'setuptools' from '/Users/ajmazurie/<path to python>/lib/python2.7/site-packages/setuptools/__init__.pyc'>, '23.1.0')

$ python -m site
sys.path = [
    '/Users/ajmazurie/Data/Professional-MSU/2015.07-MSU-me-Jupyter_in_Classroom/Projects/Callysto/callysto',
    '/Users/ajmazurie/<path to python>/lib/python2.7/site-packages/jupyter-1.0.0-py2.7.egg',
    '/Users/ajmazurie/<path to python>/lib/python2.7/site-packages/ipywidgets-5.1.5-py2.7.egg',
    '/Users/ajmazurie/<path to python>/lib/python2.7/site-packages/ipykernel-4.3.1-py2.7.egg',
    '/Users/ajmazurie/<path to python>/lib/python2.7/site-packages/nbconvert-4.2.0-py2.7.egg',
    '/Users/ajmazurie/<path to python>/lib/python2.7/site-packages/jupyter_console-5.0.0b1-py2.7.egg',
    '/Users/ajmazurie/<path to python>/lib/python2.7/site-packages/qtconsole-4.2.1-py2.7.egg',
    '/Users/ajmazurie/<path to python>/lib/python2.7/site-packages/notebook-4.2.1-py2.7.egg',
    '/Users/ajmazurie/<path to python>/lib/python2.7/site-packages/widgetsnbextension-1.2.3-py2.7.egg',
    '/Users/ajmazurie/<path to python>/lib/python2.7/site-packages/traitlets-4.2.1-py2.7.egg',
    '/Users/ajmazurie/<path to python>/lib/python2.7/site-packages/ipython-5.0.0b4-py2.7.egg',
    '/Users/ajmazurie/<path to python>/lib/python2.7/site-packages/tornado-4.3-py2.7-macosx-10.10-x86_64.egg',
    '/Users/ajmazurie/<path to python>/lib/python2.7/site-packages/jupyter_client-4.3.0-py2.7.egg',
    '/Users/ajmazurie/<path to python>/lib/python27.zip',
    '/Users/ajmazurie/<path to python>/lib/python2.7',
    '/Users/ajmazurie/<path to python>/lib/python2.7/plat-darwin',
    '/Users/ajmazurie/<path to python>/lib/python2.7/plat-mac',
    '/Users/ajmazurie/<path to python>/lib/python2.7/plat-mac/lib-scriptpackages',
    '/Users/ajmazurie/<path to python>/lib/python2.7/lib-tk',
    '/Users/ajmazurie/<path to python>/lib/python2.7/lib-old',
    '/Users/ajmazurie/<path to python>/lib/python2.7/lib-dynload',
    '/Users/ajmazurie/.direnv/pyenv/versions/2.7.11/lib/python2.7',
    '/Users/ajmazurie/.direnv/pyenv/versions/2.7.11/lib/python2.7/plat-darwin',
    '/Users/ajmazurie/.direnv/pyenv/versions/2.7.11/lib/python2.7/lib-tk',
    '/Users/ajmazurie/.direnv/pyenv/versions/2.7.11/lib/python2.7/plat-mac',
    '/Users/ajmazurie/.direnv/pyenv/versions/2.7.11/lib/python2.7/plat-mac/lib-scriptpackages',
    '/Users/ajmazurie/<path to python>/lib/python2.7/site-packages',
]
USER_BASE: '/Users/ajmazurie/.local' (doesn't exist)
USER_SITE: '/Users/ajmazurie/.local/lib/python2.7/site-packages' (doesn't exist)
ENABLE_USER_SITE: False

如果您在 setup.py 中使用 setuptools,那么您可能不熟悉这一点,您永远不应该执行python setup.py install ,而应该只执行pip install .

这很有趣,可能是我需要更新我对setuptools知识的setup.py脚本的文件夹中键入pip install . ,我能够成功安装 Jupyter 及其依赖项。 谢谢!

作为一个附带问题,为什么它不适用于python setup.py install ? 我在网上找不到任何关于为什么这可能是一个问题的参考。

最好的,奥雷利安

python setup.py install与easy_install 做同样的事情。 easy_install 做了很多不愉快的事情,这就是创建 pip 的原因。 出于向后兼容性的原因,导入了 setuptools 的python setup.py install总是会做easy_install所做的不受欢迎的事情,因此永远不应该被调用。

如果我在 NFS 上共享的 virtualvenv 中安装 ipython,我只会收到此错误。 为什么在 NFS 上的 venv 中安装会导致此问题的任何线索?

不知道为什么 NFS 会有所作为,但检查 virtualenv 中的 pip 版本,如果它不是最新的,请尝试更新它:

pip install --upgrade setuptools pip

@takluyver在“普通”文件系统中安装

奇怪。 不知道为什么 NFS 会影响它。

在使用最新的pip (8.1.2) 和最新的setuptools (25.1.6) 的 Python 2.7 中也遇到了这个问题。 难道不可能有更多事情发生吗?

预先使用pip安装backports.shutil_get_terminal_size是解决该问题的有效方法。

如其他地方所述,将 PR ( https://github.com/paulgb/runipy/pull/125 ) 放在一起以显示backports.shutil_get_terminal_size错误和entrypoints错误。 第一次提交显示第一个错误,第二次提交显示第二个错误。 在这两种情况下,矩阵中的前 3 个 CI 构建都是有意义的。 所有这三个都使用setuptools来安装所有东西。

看起来像是 setuptools 中的问题。 使用 pip 安装(应该总是这样做)将修复它

不过,我不是 100% 确定 setuptools 没有做到。

我刚刚在新的 2.7.3 virtualenv 中安装 IPython(不是 Jupyter)时遇到了同样的问题。 IPython 似乎已安装,但缺少pathlib2backports.shutil-get-terminal-size 。 在每个固定依赖项上执行pip install并且 IPython 现在正在工作。

$ pip freeze
nose==1.3.7
numpy==1.8.0
pyreadline==2.1
wsgiref==0.1.2

$ pip install ipython
[...]
Successfully installed ipython setuptools decorator pickleshare simplegeneric traitlets prompt-toolkit pygments pexpect ipython-genutils six wcwidth ptyprocess
Cleaning up...

$ pip freeze
Pygments==2.1.3
decorator==4.0.10
ipython==5.0.0
ipython-genutils==0.1.0
nose==1.3.7
numpy==1.8.0
pexpect==4.2.0
pickleshare==0.7.3
prompt-toolkit==1.0.5
ptyprocess==0.5.1
pyreadline==2.1
simplegeneric==0.8.1
six==1.10.0
traitlets==4.2.2
wcwidth==0.1.7
wsgiref==0.1.2

$ ipython
[...]
pkg_resources.DistributionNotFound: The 'pathlib2' distribution was not found and is required by ipython

$ pip install pathlib2

$ ipython
[...]
pkg_resources.DistributionNotFound: The 'backports.shutil_get_terminal_size' distribution was not found and is required by ipython

$ pip install backports.shutil_get_terminal_size

$ pip freeze
Pygments==2.1.3
backports.shutil-get-terminal-size==1.0.0
decorator==4.0.10
ipython==5.0.0
ipython-genutils==0.1.0
nose==1.3.7
numpy==1.8.0
pathlib2==2.1.0
pexpect==4.2.0
pickleshare==0.7.3
prompt-toolkit==1.0.5
ptyprocess==0.5.1
pyreadline==2.1
simplegeneric==0.8.1
six==1.10.0
traitlets==4.2.2
wcwidth==0.1.7
wsgiref==0.1.2

$ ipython
Python 2.7.3 (default, Aug 11 2016, 11:06:04) 
Type "copyright", "credits" or "license" for more information.

IPython 5.0.0 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

In [1]: 

你能做一个pip --version吗? 我猜你的 pip 版本太旧了。

是的,你是对的。 我在 pip 1.4.1 上。

在将我的 virtualenv 升级到 pip 8.1.2 和 IPython 5.0.0 后,我重复了这个练习,没有问题。

$ pip freeze
backports.shutil-get-terminal-size==1.0.0
decorator==4.0.10
ipython==5.0.0
ipython-genutils==0.1.0
numpy==1.8.0
pathlib2==2.1.0
pexpect==4.2.0
pickleshare==0.7.3
prompt-toolkit==1.0.5
ptyprocess==0.5.1
Pygments==2.1.3
simplegeneric==0.8.1
six==1.10.0
traitlets==4.2.2
wcwidth==0.1.7

我在 OS X 上也遇到了这个问题:

cternus<strong i="6">@astarael</strong>:~⟫ ipython
Traceback (most recent call last):
  File "/usr/local/bin/ipython", line 7, in <module>
    from IPython import start_ipython
  File "/usr/local/lib/python2.7/site-packages/IPython/__init__.py", line 48, in <module>
    from .core.application import Application
  File "/usr/local/lib/python2.7/site-packages/IPython/core/application.py", line 25, in <module>
    from IPython.core import release, crashhandler
  File "/usr/local/lib/python2.7/site-packages/IPython/core/crashhandler.py", line 28, in <module>
    from IPython.core import ultratb
  File "/usr/local/lib/python2.7/site-packages/IPython/core/ultratb.py", line 128, in <module>
    from IPython.utils.terminal import get_terminal_size
  File "/usr/local/lib/python2.7/site-packages/IPython/utils/terminal.py", line 22, in <module>
    from backports.shutil_get_terminal_size import get_terminal_size as _get_terminal_size
ImportError: No module named shutil_get_terminal_size
cternus<strong i="7">@astarael</strong>:~⟫ pip freeze | grep shutil
backports.shutil-get-terminal-size==1.0.0
cternus<strong i="8">@astarael</strong>:~⟫ pip freeze | grep ipython
ipython==5.0.0
ipython-genutils==0.1.0
cternus<strong i="9">@astarael</strong>:~⟫ python -m site
sys.path = [
    '/Users/cternus',
    '/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/Cellar/python/2.7.12/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages',
]
USER_BASE: '/Users/cternus/Library/Python/2.7' (doesn't exist)
USER_SITE: '/Users/cternus/Library/Python/2.7/lib/python/site-packages' (doesn't exist)
ENABLE_USER_SITE: True

我试过做sudo pip install --upgrade --force-reinstall ipython (以及重新安装 pip 和 setuptools),但没有成功。

经过一番调查,我认为backports.shutil_get_terminal_size模块本身有问题:

cternus<strong i="7">@astarael</strong>:/usr/local/lib/python2.7/site-packages⟫ python
Python 2.7.12 (default, Jun 29 2016, 14:05:02)
[GCC 4.2.1 Compatible Apple LLVM 7.3.0 (clang-703.0.31)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import backports
>>> dir(backports)
['__doc__', '__name__', '__path__']
>>> import backports.shutil_get_terminal_size
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named shutil_get_terminal_size
>>>
cternus<strong i="8">@astarael</strong>:/usr/local/lib/python2.7/site-packages⟫ ls backports
__init__.py              functools_lru_cache.py   shutil_get_terminal_size
cternus<strong i="9">@astarael</strong>:/usr/local/lib/python2.7/site-packages⟫ ls backports/shutil_get_terminal_size
__init__.py           __init__.pyc          get_terminal_size.py  get_terminal_size.pyc
cternus<strong i="10">@astarael</strong>:/usr/local/lib/python2.7/site-packages⟫

有趣的是, backports模块似乎安装了自己的两个(略有不同?!)版本:

root<strong i="15">@astarael</strong>:/usr/local/lib/python2.7/site-packages/backports⟫ pip show --no-cache -vf backports.shutil-get-terminal-size
---
Metadata-Version: 2.0
Name: backports.shutil-get-terminal-size
Version: 1.0.0
Summary: A backport of the get_terminal_size function from Python 3.3's shutil.
Home-page: https://github.com/chrippa/backports.shutil_get_terminal_size
Author: Christopher Rosell
Author-email: [email protected]
Installer: pip
License: MIT
Location: /usr/local/lib/python2.7/site-packages
Requires:
Classifiers:
  Development Status :: 5 - Production/Stable
  License :: OSI Approved :: MIT License
  Programming Language :: Python :: 2.6
  Programming Language :: Python :: 2.7
  Programming Language :: Python :: 3.2
Files:
  backports.shutil_get_terminal_size-1.0.0.dist-info/DESCRIPTION.rst
  backports.shutil_get_terminal_size-1.0.0.dist-info/INSTALLER
  backports.shutil_get_terminal_size-1.0.0.dist-info/METADATA
  backports.shutil_get_terminal_size-1.0.0.dist-info/RECORD
  backports.shutil_get_terminal_size-1.0.0.dist-info/WHEEL
  backports.shutil_get_terminal_size-1.0.0.dist-info/metadata.json
  backports.shutil_get_terminal_size-1.0.0.dist-info/top_level.txt
  backports/__init__.py
  backports/__init__.pyc
  backports/shutil_get_terminal_size/__init__.py
  backports/shutil_get_terminal_size/__init__.pyc
  backports/shutil_get_terminal_size/get_terminal_size.py
  backports/shutil_get_terminal_size/get_terminal_size.pyc
  shutil_backports/__init__.py
  shutil_backports/__init__.pyc
  shutil_backports/get_terminal_size.py
  shutil_backports/get_terminal_size.pyc

并修补 IPython/utils/terminal.py 以使用 shutil_backports.get_terminal_size 工作。 去搞清楚。

你好,

我在 virtualenv 中遇到了同样的错误。 我一直在使用 pip 来安装 jupyter。

我得到
导入错误:没有名为shutil_get_terminal_size 的模块

_"pip freeze" 显示 backports.shutil-get-terminal-size==1.0.0_

所以我尝试升级。 这显示了:

_pip install --upgrade backports.shutil-get-terminal-size_
要求已经是最新的:/Library/Python/2.7/site-packages 中的 backports.shutil-get-terminal-size

所以它以某种方式访问​​了我的全局库,而不是我的 venv 中的库。

然后我从全局 python 中卸载了 backports.shutil-get-terminal-size 并将其安装在我的 venev 中。 现在它工作正常。

我可以通过这个安装 100% 的时间重现这个

pip install --user --upgrade ipython==4.2

通过此安装,我可以在 0% 的时间内重现此内容

pip install --user --upgrade ipython==4.1.1

请注意,使用--user ,命令行 python 工具安装在~/Library/Python/2.7/bin/ipython而不是/usr/local/bin

@AndrewHoos对我来说,这两个命令都正确地获得了依赖项。 你从pip --version什么? 它应该至少是 8。如果不是,请确保您的 setuptools 和 pip 是最新的:

pip install --upgrade setuptools pip

我遇到了这个问题,笔记本 4.2.2 和 ipython 5.1.0 安装了conda 。 如上所述,我已经安装了shutil_get_terminal_size

pip install backports.shutil_get_terminal_size
Requirement already satisfied (use --upgrade to upgrade): backports.shutil_get_terminal_size in /.../anaconda/lib/python2.7/site-packages

但是,在常规 python shell 中, import backports.shutil_get_terminal_size命令失败。

好的,我找到了一个粗略但简单的解决方案:卸载并重新安装。 现在 ipython 工作....

$ pip uninstall backports.shutil_get_terminal_size
Uninstalling backports.shutil-get-terminal-size-1.0.0:
  /home/pierre/Programmes/anaconda/lib/python2.7/site-packages/backports
  /home/pierre/Programmes/anaconda/lib/python2.7/site-packages/backports.shutil_get_terminal_size-1.0.0-py2.7.egg-info
Proceed (y/n)? y
  Successfully uninstalled backports.shutil-get-terminal-size-1.0.0
$ pip install backports.shutil_get_terminal_size
Collecting backports.shutil_get_terminal_size
  Downloading backports.shutil_get_terminal_size-1.0.0-py2.py3-none-any.whl
Installing collected packages: backports.shutil-get-terminal-size
Successfully installed backports.shutil-get-terminal-size-1.0.0

也遇到了这个问题
可悲的是,上面没有任何帮助,但问题与上面报告的完全一样:

导入错误:没有名为shutil_get_terminal_size 的模块

卸载和安装 IPython 和 back ports 并不快乐。

问题是我在全球范围内安装了 Jupyter 和朋友,并在全球范围内安装了 shutil_get_terminal_size。 即在 /Library/Python/2.7/site-packages/shutil_backports/

但是我也在本地安装了backports.functools_lru_cache,这实际上阻止了shutil_backports的导入。

要测试这是否是问题: ls ~/Library/Python/2.7/lib/python/site-packages (在 OSX 上,如果您看到一个文件夹返回端口,那可能是错误的。我从用户库中卸载了该库,然后将它添加到系统库中。无论哪种方式,您都不会混合和匹配您的后端端口。它必须是全局的或本地的才能完全工作。

Debian Sid(不稳定)中的相同问题已完全更新。 我更新了点子; 尝试卸载并重新安装; 等等。没有任何效果。

# uname -a
Linux bunsen 4.7.0-1-amd64 #1 SMP Debian 4.7.2-1 (2016-08-28) x86_64 GNU/Linux
# pip2 --version
pip 8.1.2 from /usr/local/lib/python2.7/dist-packages (python 2.7)
# pip show ipython
---
Metadata-Version: 2.0
Name: ipython
Version: 5.1.0
Summary: IPython: Productive Interactive Computing
Home-page: http://ipython.org
Author: The IPython Development Team
Author-email: [email protected]
Installer: pip
License: BSD
Location: /usr/local/lib/python2.7/dist-packages
Requires: pickleshare, simplegeneric, traitlets, backports.shutil-get-terminal-size, decorator, pygments, prompt-toolkit, pexpect, pathlib2, setuptools
Classifiers:
  Framework :: IPython
  Intended Audience :: Developers
  Intended Audience :: Science/Research
  License :: OSI Approved :: BSD License
  Programming Language :: Python
  Programming Language :: Python :: 2
  Programming Language :: Python :: 2.7
  Programming Language :: Python :: 3
  Topic :: System :: Shells
Entry-points:
  [console_scripts]
  iptest = IPython.testing.iptestcontroller:main
  iptest2 = IPython.testing.iptestcontroller:main
  ipython = IPython:start_ipython
  ipython2 = IPython:start_ipython
  [pygments.lexers]
  ipython = IPython.lib.lexers:IPythonLexer
  ipython3 = IPython.lib.lexers:IPython3Lexer
  ipythonconsole = IPython.lib.lexers:IPythonConsoleLexer

卸载并安装 backports.shutil_get_terminal_size 再次起作用。

+1 在 osx。 同样的问题, - 卸载全局并安装在 virtualenv 工作并指向本地。

@Hiczeke我试过了,但没有用

尝试了很多东西后,最终解决的命令是更新setuptools
我会推荐:

  • 卸载任何系统包,如 debian ipythonpython-backports-shutil-get-terminal-size
  • 使用 pip 卸载: ipythonjupyterbackports.shutil_get_terminal_size
  • 升级pipsetuptools: pip install --upgrade setuptools pip`
  • 用 pip 重新安装 ipython(和其他): pip install ipython jupyter

以下为我解决了这个问题:
pip 卸载 backports.shutil_get_terminal_size
pip install backports.shutil_get_terminal_size

@Paul-Richter @Hiczeke
非常感谢!
重新安装“backports.shutil_get_terminal_size”对我来说效果很好。

pip install --upgrade --force-reinstall ipython

这解决了我的 Mac 上的问题

我很困惑:

sudo pip uninstall backports.shutil_get_window_size
>>Cannot uninstall requirement backports.shutil-get-window-size, not installed

sudo pip install backports.shutil_get_window_size
>>Could not find a version that satisfies the requirement backports.shutil_get_window_size (from versions: )
>>No matching distribution found for backports.shutil_get_window_size

为你固定,伊恩。

须藤 pip 卸载 backports.shutil_get_终端_size

须藤PIP安装backports.shutil_get_终端_size

2017 年 1 月 25 日,星期三,下午 12:52,Ian Hincks通知@ github.com
写道:

我很困惑:

须藤 pip 卸载 backports.shutil_get_window_size

无法卸载要求 backports.shutil-get-window-size,未安装

须藤 pip 安装 backports.shutil_get_window_size

找不到满足 backports.shutil_get_window_size 要求的版本(来自版本:)
找不到与 backports.shutil_get_window_size 匹配的分布


你收到这个是因为你被提到了。
直接回复本邮件,在GitHub上查看
https://github.com/ipython/ipython/issues/9656#issuecomment-275197674
或静音线程
https://github.com/notifications/unsubscribe-auth/ATln0kDS_u6PaTk6Qunjc_oEtKCv_-cRks5rV5n7gaJpZM4I9MnS
.

@Paul-Richter 啊,谢谢:)

没有任何卸载/重新安装的东西对我有用。 @ternus在上面的评论中建议了最终对我/usr/local/lib/python2.7/dist-packages/IPython/utils/terminal.py并更改行

from backports.shutil_get_terminal_size import get_terminal_size as _get_terminal_size

from shutil_backports import get_terminal_size as _get_terminal_size

@ihincks :你的评论解决了我在 osx 上的问题😃

我今天在 OS X 10.12.3 上遇到了这个错误。 解决了以下问题:

pip install --upgrade pip setuptools
pip install --upgrade --force-reinstall ipython

我不相信这是一个 ipython 错误。 建议关闭。

我很确定这不是 IPython 错误,但我希望我能弄清楚到底出了什么问题,这样我们就可以为人们提供比重新安装+希望更好的解决方案......

@pierre-haessig 你拯救了我的一天。非常感谢。

@ihincks我尝试了所有帖子,但都没有奏效。 只有你的才有效。 你是一个救生员:)

由 ihincks 修复也适用于 Windows 10

我希望它可以帮助某人。
就我而言,我发现问题的根源是错误的 ipython 版本:

ls -lah /usr/local/bin/ipython*
-rwxr-xr-x  1 z  staff   247B Mar  5 15:16 /usr/local/bin/ipython
-rwxr-xr-x  1 z  staff   247B Mar  5 15:16 /usr/local/bin/ipython3

我不知道它是怎么发生的,因为我根本没有 python3 版本。
当我卸载 python 并删除相关库时,我的问题解决了

brew uninstall python
rm -rf /usr/local/lib/python2.7

我已经重新安装了 python 并确保 pip 具有正确的版本和位置。
pip 9.0.1 from /usr/local/lib/python2.7/site-packages (python 2.7)
pip2 install ipython

@ihincks

这对我来说是唯一正确的答案。

须藤 pip 卸载 backports.shutil_get_terminal_size
须藤 pip 安装 backports.shutil_get_terminal_size

Pip 应该不会与 sudo 一起使用。
将 sudo 与 pip 一起使用是导致系统以这种方式被破坏的原因
问题描述。

如果您需要使用 sudo,那么您的系统就会出现问题。

>

@ihincks在 FreeBSD 上,只有您的解决方案有效! 万分感谢!

仅供参考,我遇到了同样的问题,但只能通过在 pip 中使用--ignore-installed选项来解决shutil_get_terminal_size问题。 没有它,软件包将无法正确重新安装。

pip install --ignore-installed backports.shutil_get_terminal_size

@AllanDaemon的回应为我解决了问题!

遇到了类似的问题,通过卸载并重新安装 backports.shutil_get_terminal_size 解决了

pip 卸载 backports.shutil_get_terminal_size
pip install backports.shutil_get_terminal_size

我有同样的问题。
在尝试了上面的许多解决方案后,我终于发现问题是由于我的 $PATH 设置造成的。
也许以前我使用过pip install --user选项,因此/home/jin/.local/lib/python2.7位于我的 $PATH 中,其中存在backports另一个版本。
我通过删除.local/lib/python2.7文件夹解决了这个问题。

要测试 $PATH 是否有问题,您可以简单地尝试

import sys
print sys.path

该问题是由“系统”和“用户”位置中的“反向移植”引起的。
在我的 macOS 上,我已经在系统中安装了 shutil_get_terminal_size,但是我在我的用户家中安装了另一个包。 此用户文件夹优先,您不在系统中搜索。
安装所有的 python 包,使用 --user 是明智的。
如果您卡住了用 --user 强制重新安装:
pip install --ignore-installed backports.shutil_get_terminal_size --user
这可能应该添加到一些诊断中,因为它每次都让我感到困扰

backports应该是一个“命名空间包”,它允许在不同的地方安装子包。 但它似乎不能可靠地工作,我不知道为什么。 我无法复制它以进行本地调试,而我通过其他人调试它的尝试一直令人费解。

@takluyver你看过https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=843898吗? 最后2-3个帖子很有趣。

不幸的是,这或多或少看起来像我发现的 - 有些东西弄乱了backports命名空间包,但我们无法弄清楚是什么或如何。 Debian 非常有道理地表示,如果 pip 安装的软件包破坏了某些东西,这不是他们的问题。

我在这里评论https://github.com/chrippa/backports.shutil_get_terminal_size/issues/9#issuecomment -279021331 并在上面引用了通过 pip 找到轮子与非轮子(非二进制)安装之间的差异,是有什么相关的吗?

作为下一版本 IPython 的后备,vendoring 怎么样?

这是可以移植到 CPython 的 Shutil 中的东西吗?

这是可以移植到 CPython 的 Shutil 中的东西吗?

可能不是,我们已经没有在 IPython 6.0/master 上使用backport包,这已经在我们支持的所有 CPython 稳定版中,并且这个问题只是因为我们在 2.7 上使用了backport包因为这不在标准 CPython 2.7 中。

知道了。 谢谢@Carreau。 很高兴这只是一个暂时的问题。

删除全局安装,在 virtualenv 中卸载,然后在 virtualenv 中重新安装为我解决了这个问题。

您只需要输入以下命令即可:

conda config --add channels conda-forge
conda install backports.shutil_get_terminal_size

我曾经有同样的问题,这解决了它。

你好
使用 ipython2 在 Ubuntu 17.10 上遇到同样的问题。
python3没问题

修复: sudo -H pip install --ignore-installed backports.shutil_get_terminal_size

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 17.10
Release:    17.10
Codename:   artful

$ python --version
Python 2.7.14

$ python3 --version
Python 3.6.3

$ pip show ipython
Name: ipython
Version: 5.1.0
Summary: IPython: Productive Interactive Computing
Home-page: http://ipython.org
Author: The IPython Development Team
Author-email: [email protected]
License: BSD
Location: /usr/lib/python2.7/dist-packages
Requires: backports.shutil-get-terminal-size, pathlib2, pexpect

$ pip3 show ipython
Name: ipython
Version: 5.1.0
Summary: IPython: Productive Interactive Computing
Home-page: http://ipython.org
Author: The IPython Development Team
Author-email: [email protected]
License: BSD
Location: /usr/lib/python3/dist-packages
Requires: pexpect

$ ipython
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/lib/python2.7/dist-packages/IPython/__init__.py", line 48, in <module>
    from .core.application import Application
  File "/usr/lib/python2.7/dist-packages/IPython/core/application.py", line 25, in <module>
    from IPython.core import release, crashhandler
  File "/usr/lib/python2.7/dist-packages/IPython/core/crashhandler.py", line 28, in <module>
    from IPython.core import ultratb
  File "/usr/lib/python2.7/dist-packages/IPython/core/ultratb.py", line 128, in <module>
    from IPython.utils.terminal import get_terminal_size
  File "/usr/lib/python2.7/dist-packages/IPython/utils/terminal.py", line 22, in <module>
    from backports.shutil_get_terminal_size import get_terminal_size as _get_terminal_size
ImportError: No module named shutil_get_terminal_size

$ apt-cache show python-ipython
Package: python-ipython
Architecture: all
Version: 5.1.0-3
Priority: optional
Section: universe/python
Source: ipython
Origin: Ubuntu
Maintainer: Ubuntu Developers <[email protected]>
Original-Maintainer: Debian Python Modules Team <[email protected]>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 1864
Depends: python-decorator, python-pexpect, python-pickleshare, python-pkg-resources, python-prompt-toolkit, python-pygments, python-simplegeneric, python-traitlets, python:any (<< 2.8), python:any (>= 2.7.5-5~), python-backports-shutil-get-terminal-size, python-pathlib2
Breaks: ipython (<< 4)
Replaces: ipython (<< 4)
Filename: pool/universe/i/ipython/python-ipython_5.1.0-3_all.deb
Size: 375048
MD5sum: 7ae68256eb7c6183634ea3680ad4449d
SHA1: 7e2916b5e661793dcb55e86404de5cd1f0d19d8b
SHA256: 0664f1d3c5543cc3ba4db4fcd8bf4526de714e3f35687b49052fad7831cbdee3
Homepage: https://github.com/ipython/ipython
Description-en: Enhanced interactive Python shell (Python 2 version)
 IPython can be used as a replacement for the standard Python shell,
 or it can be used as a complete working environment for scientific
 computing (like Matlab or Mathematica) when paired with the standard
 Python scientific and numerical tools. It supports dynamic object
 introspections, numbered input/output prompts, a macro system,
 session logging, session restoring, complete system shell access,
 verbose and colored traceback reports, auto-parentheses, auto-quoting,
 and is embeddable in other Python programs.
 .
 This package contains the backend terminal shell for Python 2: for
 the actual frontend install ipython.
Description-md5: 713480d81c0c64f1b3a9c4c9350ef96c

$ apt-cache show python3-ipython
Package: python3-ipython
Architecture: all
Version: 5.1.0-3
Priority: optional
Section: universe/python
Source: ipython
Origin: Ubuntu
Maintainer: Ubuntu Developers <[email protected]>
Original-Maintainer: Debian Python Modules Team <[email protected]>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 1864
Depends: python3-decorator, python3-pexpect, python3-pickleshare, python3-pkg-resources, python3-prompt-toolkit, python3-pygments, python3-simplegeneric, python3-traitlets, python3:any (>= 3.3.2-2~), python-pexpect
Breaks: ipython3 (<< 4)
Replaces: ipython3 (<< 4)
Filename: pool/universe/i/ipython/python3-ipython_5.1.0-3_all.deb
Size: 375114
MD5sum: c0585bf56c9fbcbb73aa45d25b8fbe14
SHA1: c7118d1050f50723d614a3060ad6d8d31a96e73c
SHA256: 293217ee356c2c2623efce3fc391b1876a38585b0ae7462b2a8a0d3f3424ec86
Homepage: https://github.com/ipython/ipython
Description-en: Enhanced interactive Python shell (Python 3 version)
 IPython can be used as a replacement for the standard Python shell,
 or it can be used as a complete working environment for scientific
 computing (like Matlab or Mathematica) when paired with the standard
 Python scientific and numerical tools. It supports dynamic object
 introspections, numbered input/output prompts, a macro system,
 session logging, session restoring, complete system shell access,
 verbose and colored traceback reports, auto-parentheses, auto-quoting,
 and is embeddable in other Python programs.
 .
 This package contains the backend terminal shell for Python 3: for
 the actual frontend install ipython.
Description-md5: 8182f91eff6e0e148e574a20d31e0f51

@nicola-lunghi 请不要建议人们使用sudo pip ,从长远来看,这只会以更奇怪的方式破坏您的系统。 Pip 将与系统包管理器争夺某些文件。

这相当于从一氧化碳警报器中取出电池,因为它经常在夜间唤醒您。 你的加热器有问题; 你需要一个适当的修复。

谢谢@Carreau
在我家灭火后我会纠正我的答案。

Ps 请修复“heather”-> deb 依赖项

最简单的解决方法可能是使用pip install --user ipython安装更新版本的 IPython( --user标志意味着它不需要 sudo)。 我们已经在 IPython 中解决了这个问题,但是我们无法控制 Debian 软件包,并且通过 apt 安装的用户会得到一个过时的 IPython 版本。

如果有人在 Cygwin 和 python2 上遇到同样的问题,解决方案是运行 Cygwin setup.exe(或 apt-cyg utls 之一)并安装python2-backports.shutil_get_terminal_size 。 默认情况下,这不会作为依赖项触发,因此需要手动安装。

ipython3 开箱即用。

此页面是否有帮助?
0 / 5 - 0 等级