Ipython: ImportError:没有名为 shutil_get_terminal_size 的模块

创建于 2016-07-28  ·  81评论  ·  资料来源: ipython/ipython

来自@carreau的更新:
重新打开,标记 5.4 我们应该供应商 shutil_get_terminal_size。


安装ipython sudo apt-get install ipython-notebook , ipython后出现错误,如下:

jiangyuping@联想:~$ ipython
回溯(最近一次通话最后):
文件“/usr/local/bin/ipython”,第 4 行,在
从 IPython 导入 start_ipython
文件“/usr/local/lib/python2.7/dist-packages/IPython/init .py ”,第 48 行,在
从 .core.application 导入应用程序
文件“/usr/local/lib/python2.7/dist-packages/IPython/core/application.py”,第 25 行,在
从 IPython.core 导入版本,crashhandler
文件“/usr/local/lib/python2.7/dist-packages/IPython/core/crashhandler.py”,第 28 行,在
从 IPython.core 导入 ultratb
文件“/usr/local/lib/python2.7/dist-packages/IPython/core/ultratb.py”,第 128 行,在
从 IPython.utils.terminal 导入 get_terminal_size
文件“/usr/local/lib/python2.7/dist-packages/IPython/utils/terminal.py”,第 22 行,在
从 backports.shutil_get_terminal_size 导入 get_terminal_size 作为 _get_terminal_size
ImportError:没有名为 shutil_get_terminal_size 的模块

最有用的评论

@oschow这个_应该_一般工作:

# start by making sure pip, setuptools are up to date:
pip install --upgrade setuptools pip
# uninstall if pip thinks you already have it but don't seem to:
pip uninstall backports.shutil_get_terminal_size
# install it again with out definitely-up-to-date pip:
pip install --upgrade backports.shutil_get_terminal_size

所有81条评论

您在 apt 外部安装了更新的 IPython 副本,它需要包backports.shutil_get_terminal_size 。 使用pip来安装它。

@takluyverpip install ipython之后,它出现了

jiangyuping@Lenovo :~/ipython$ pip install ipython
已满足要求(使用 --upgrade 升级):/usr/local/lib/python2.7/dist-packages 中的 ipython

然后, ipython ,它出现

jiangyuping@联想:~/ipython$ ipython
回溯(最近一次通话最后):
文件“/usr/local/bin/ipython”,第 4 行,在
从 IPython 导入 start_ipython
文件“/home/jiangyuping/ipython/IPython/ init .py”,第 48 行,在
从 .core.application 导入应用程序
文件“/home/jiangyuping/ipython/IPython/core/application.py”,第 25 行,在
从 IPython.core 导入版本,crashhandler
文件“/home/jiangyuping/ipython/IPython/core/crashhandler.py”,第28行,在
从 IPython.core 导入 ultratb
文件“/home/jiangyuping/ipython/IPython/core/ultratb.py”,第 128 行,在
从 IPython.utils.terminal 导入 get_terminal_size
文件“/home/jiangyuping/ipython/IPython/utils/terminal.py”,第 22 行,在
从 backports.shutil_get_terminal_size 导入 get_terminal_size 作为 _get_terminal_size
ImportError:没有名为 shutil_get_terminal_size 的模块

我的意思是:

pip install backports.shutil_get_terminal_size

但是,如果它没有把它作为 IPython 的依赖项,那可能意味着你有一个旧版本的 pip。 要升级它:

pip install --upgrade setuptools pip

谢谢,安装成功。

我尝试了很多东西。 最后一个解决的是更新setuptools 。 我还更新了 pip 并重新安装了 ipython 等。

谢谢! 这对我不起作用。 但它给了我一个想法......我做了一个 pip install --upgraded 使用 backports.shutil_get_terminal_size 的 whl 文件

在此之前,简单地进行 pip 安装会导致“要求已经满足”等。
现在我可以运行 Turi 的 GraphLab Create :)

@jnault我遇到了同样的问题,因为我尝试安装 Turi 的 GraphLab Create。 您使用了哪些确切的命令?

我不记得确切,但我记得这很容易。 我的步骤:
1) Google 搜索扩展名为 .whl 的文件,然后
2) 谷歌搜索如何安装 Whl 文件
嗯。 好吧,这看起来很刻薄或什么的。 我是真诚的,并试图提供帮助。 但这就是我所做的。 很确定该文件来自pypi。 我猜猜文件可能安装任何东西,所以我确保它来自一个信誉良好的来源。
我猜这个命令是:pip install --upgrade backports.shutil_get_terminal_size.whl

@oschow这个_应该_一般工作:

# start by making sure pip, setuptools are up to date:
pip install --upgrade setuptools pip
# uninstall if pip thinks you already have it but don't seem to:
pip uninstall backports.shutil_get_terminal_size
# install it again with out definitely-up-to-date pip:
pip install --upgrade backports.shutil_get_terminal_size

^ Minrk 有更好的建议。
Minrk,您写道“如果 pip 认为您已经拥有它但似乎没有”。 那么,有可能该文件是在初始 python 安装中安排的,但后来错过了? 因此它被列为存在但实际上不是?

我在尝试安装 Graphlab Create 时遇到了同样的问题。 minrk 的解决方案也为我修复了它。

@minrk为我提供了有效的解决方案,只需卸载然后安装对我有用。
这就是我所做的。

如果 pip 认为您已经拥有它但似乎没有,请卸载:

pip 卸载 backports.shutil_get_terminal_size

在没有绝对最新的 pip 的情况下再次安装它:

pip install --upgrade backports.shutil_get_terminal_size

删除<path-to>/Python/2.7/site-packages/backports/__init__.*

@bevice然后呢?

到目前为止,我无法解决有关此线程或任何其他线程的任何建议。

如果我跑

$ python -s
>>> from backports.shutil_get_terminal_size import get_terminal_size
>>> get_terminal_size()
terminal_size(columns=112, lines=40)

有用。 但是运行 ipython 或 jupyter notebook 给了我同样的错误,它没有找到 shutil_get_terminal_size

我认为这意味着您在某个地方安装了另一个backports.<something>包,它弄乱了命名空间包机制。 您可能需要找到并卸载它。 尝试pip list以查看所有已安装的软件包。

@takluyver感谢您的快速回复。

这是我发现的:

backports-abc (0.4)
backports.shutil-get-terminal-size (1.0.0)
backports.ssl-match-hostname (3.4.0.2)

我现在能做什么?

卸载backports.ssl-match-hostnamebackports.shutil-get-terminal-size并重新安装它们。

我是否必须“重新启动”anaconda 或其他东西才能使更改生效? 卸载您提到的两个软件包并重新安装它们都不起作用。

不,没有重启。 不过,只是为了确保在您卸载它们后,再次尝试卸载。 重复直到找不到要卸载的内容。 有时在不同的地方有副本。

如果这仍然不起作用,请尝试卸载backports.ssl-match-hostname并将其卸载(至少在您找到需要它之前...)

好吧。 我尝试了你所说的一切,但没有任何效果。 我有哪些选择? 当我安装 pymc3 时问题就开始了。 另一件事是,我更改了一些脚本以便将一些模块添加到 nipype 工具箱。 我应该删除所有内容并重新安装吗? 我希望这将是最后的手段。

在您尝试运行 IPython 的同一 Python 中,您会得到什么尝试:

import backports
print(backports)

我已经安装了 backports 运行它:

>>> import backports
>>> print(backports)
<module 'backports' from '/nobackup/archimedes1/Glad/anaconda2_serverwide/lib/python2.7/site-packages/backports/

然后卸载它们,然后再次运行:

>>> import backports
>>> print(backports)
<module 'backports' (built-in)>

所以显然我在某处有一些内置的包,这些包把事情搞砸了。 但我不知道如何找到它们。 即使我找到它们,我也可能无法更改任何内容,因为我没有 root 权限。

它显示给您的文件夹中是否还有其他内容( /nobackup/archimedes1/Glad/anaconda2_serverwide/lib/python2.7/site-packages/backports/ )?

不,现在它已被卸载,该文件夹完全丢失了。 和文件夹一样
../site-packages/backports.shutil-get-terminal-size-1.0.0安装时曾经在那里。

你能在 Python 中检查backports.__path__吗?

未安装反向端口:
['/nobackup/archimedes1/Glad/anaconda2_serverwide/lib/python2.7/site-packages/backports']

和以前的目录一样吗? 是不是肯定不见了? 我不明白如果那里什么都没有,它怎么能找到那条路。

我在 anaconda2_serverwide 目录中搜索了所有可能的反向端口。 我不确定这一切意味着什么。
这是我发现的:

file:///nobackup/archimedes1/Glad/anaconda2_serverwide/pkgs/future-0.15.2-py27_0/lib/python2.7/site-packages/future/backports
file:///nobackup/archimedes1/Glad/anaconda2_serverwide/pkgs/configparser-3.5.0-py27_0/lib/python2.7/site-packages/backports
file:///nobackup/archimedes1/Glad/anaconda2_serverwide/pkgs/ssl_match_hostname-3.4.0.2-py27_1/lib/python2.7/site-packages/backports
file:///nobackup/archimedes1/Glad/anaconda2_serverwide/pkgs/get_terminal_size-1.0.0-py27_0/lib/python2.7/site-packages/backports
file:///nobackup/archimedes1/Glad/anaconda2_serverwide/lib/python2.7/site-packages/future/backports
file:///nobackup/archimedes1/Glad/anaconda2_serverwide/pkgs/backports.shutil_get_terminal_size-1.0.0-py27_1/lib/python2.7/site-packages/backports
file:///nobackup/archimedes1/Glad/anaconda2_serverwide/pkgs/backports-1.0-py27_0/lib/python2.7/site-packages/backports
file:///nobackup/archimedes1/Glad/anaconda2_serverwide/pkgs/backports-1.0-py27_0
file:///nobackup/archimedes1/Glad/anaconda2_serverwide/pkgs/backports_abc-0.4-py27_0
file:///nobackup/archimedes1/Glad/anaconda2_serverwide/lib/python2.7/site-packages/backports_bak
file:///nobackup/archimedes1/Glad/anaconda2_serverwide/pkgs/backports.shutil_get_terminal_size-1.0.0-py27_1/lib/python2.7/site-packages/backports.shutil_get_terminal_size-1.0.0.dist-info
file:///nobackup/archimedes1/Glad/anaconda2_serverwide/pkgs/backports.shutil_get_terminal_size-1.0.0-py27_1
file:///nobackup/archimedes1/Glad/anaconda2_serverwide/pkgs/get_terminal_size-1.0.0-py27_0/lib/python2.7/site-packages/backports.shutil_get_terminal_size-1.0.0-py2.7.egg-info
file:///nobackup/archimedes1/Glad/anaconda2_serverwide/pkgs/ssl_match_hostname-3.4.0.2-py27_1/lib/python2.7/site-packages/backports.ssl_match_hostname-3.4.0.2-py2.7.egg-info
file:///nobackup/archimedes1/Glad/anaconda2_serverwide/pkgs/backports-1.0-py27_0.tar.bz2
file:///nobackup/archimedes1/Glad/anaconda2_serverwide/pkgs/backports.shutil_get_terminal_size-1.0.0-py27_1.tar.bz2
file:///nobackup/archimedes1/Glad/anaconda2_serverwide/pkgs/backports_abc-0.4-py27_0/lib/python2.7/site-packages/backports_abc-0.4-py2.7.egg-info
file:///nobackup/archimedes1/Glad/anaconda2_serverwide/lib/python2.7/site-packages/backports_abc-0.4-py2.7.egg-info
file:///nobackup/archimedes1/Glad/anaconda2_serverwide/conda-meta/backports-1.0-py27_0.json
file:///nobackup/archimedes1/Glad/anaconda2_serverwide/conda-meta/backports_abc-0.4-py27_0.json
file:///nobackup/archimedes1/Glad/anaconda2_serverwide/conda-meta/backports.shutil_get_terminal_size-1.0.0-py27_1.json
file:///nobackup/archimedes1/Glad/anaconda2_serverwide/lib/python2.7/site-packages/backports_abc.py
file:///nobackup/archimedes1/Glad/anaconda2_serverwide/pkgs/backports_abc-0.4-py27_0/lib/python2.7/site-packages/backports_abc.py
file:///nobackup/archimedes1/Glad/anaconda2_serverwide/lib/python2.7/site-packages/backports_abc.pyc
file:///nobackup/archimedes1/Glad/anaconda2_serverwide/pkgs/backports_abc-0.4-py27_0/lib/python2.7/site-packages/backports_abc.pyc

卸载backports后是否重新启动了 Python? 如果没有,您可以重新启动 Python 并再次检查backports.__path__吗? 如果那里没有文件,我不知道有什么方法可以识别该路径。

如何重新启动python?

我还尝试了以下方法:

> conda list | grep backports
backports                 1.0                      py27_0  
backports.shutil_get_terminal_size 1.0.0                    py27_1    conda-forge
backports_abc             0.4                      py27_0  

所以我用 conda 删除了 backports.shutil_get_terminal_size:
> conda uninstall backports.shutil_get_terminal_size

当我现在尝试在 python 中导入 backports.shutil_get_terminal_size 时,它​​找不到它。 所以我删除了 ipython 和 jupyter 并通过 conda 重新安装了 ipython,它还安装了 jupyter 和 backports.shutil_get_terminal_size。 但是,它_仍然_不起作用! 我难住了。

然后我通过 conda 删除了安装并通过 pip 重新安装了它们。 它_仍然_不起作用....

如何重新启动python?

关闭它( exit() )然后重新启动它。

检查后向端口:

> conda list | grep backports
backports                 1.0                      py27_0  
backports.shutil_get_terminal_size 1.0.0                    py27_1    conda-forge
backports_abc             0.4                      py27_0  

重新启动后运行python:

>>> import backports
>>> backports.shutil_get_terminal_size
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'shutil_get_terminal_size'

尝试升级它:

> pip install --upgrade backports.shutil_get_terminal_size
Requirement already up-to-date: backports.shutil_get_terminal_size in /nobackup/archimedes1/Glad/anaconda2_serverwide/lib/python2.7/site-packages

我不明白。 我还可以做些什么? 我可以编辑“terminal.py”以将其指向正确的方向吗?

如果您卸载所有反向移植包,请重新启动 Python 并检查:

import backports
backports.__path__

你得到了什么?

>>> import backports
>>> backports.__path__
['/home/raid2/mihai/.local/lib/python2.7/site-packages/backports', '/nobackup/archimedes1/Glad/anaconda2_serverwide/lib/python2.7/site-packages/backports']

前一个目录( /home/raid2下的那个)中是否安装了任何东西?

那是存储系统范围的 python 和 ipython 包的目录。 但是,我没有使用它们,因为我使用的是本地 anaconda 安装。 它不应该干扰。 说实话,在 /home/raid2... 目录下没有 backports.shutil_get_terminal_size 包。

当我运行系统范围的安装(具有旧版本的 ipython)时,它运行得很好。 但是当我使用较新的 anaconda 启动我的环境时
export PATH="/nobackup/archimedes1/Glad/anaconda2_serverwide/bin:$PATH" ,找不到窗口大小函数。

我制作了一个脚本来帮助调试它。 你能运行它并发布输出吗?

https://gist.github.com/takluyver/73cf4e7e7cff4d95f3b23ea80d59bcab

好吧!!!1

这就是我所做的以某种方式使其工作。
使用 conda 和 pip 卸载 ipython 和 jupyter 和 backports.shutil_get_window_size:

conda uninstall jupyter ipython backports.shutil_get_window_size
pip uninstall jupyter ipython backports.shutil_get_window_size

我确保任何包裹都没有留下任何东西。 然后我只用 conda 重新安装了 ipython:

> conda install ipython
Fetching package metadata .........
Solving package specifications: ..........

Package plan for installation in environment //nobackup/archimedes1/Glad/anaconda2_serverwide:

The following NEW packages will be INSTALLED:

    backports:                          1.0-py27_0              
    backports.shutil_get_terminal_size: 1.0.0-py27_1 conda-forge
    ipython:                            5.1.0-py27_1 conda-forge

Proceed ([y]/n)? y

Extracting packages ...
[      COMPLETE      ]|###################################################################################| 100%
Linking packages ...
[      COMPLETE      ]|###################################################################################| 100%
mihai<strong i="11">@archimedes</strong>:/tmp > ipython

现在它起作用了!!! 感谢您的慷慨时间@takluyver

这是脚本的输出:

In [2]: run debug_namespace_pkg.py
mod: <module 'backports' from '/home/raid2/mihai/.local/lib/python2.7/site-packages/backports/__init__.pyc'>

backports.__path__ = ['/home/raid2/mihai/.local/lib/python2.7/site-packages/backports', '//nobackup/archimedes1/Glad/anaconda2_serverwide/lib/python2.7/site-packages/backports']

Found /home/raid2/mihai/.local/lib/python2.7/site-packages/backports
__init__.py contains:
from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)


Found //nobackup/archimedes1/Glad/anaconda2_serverwide/lib/python2.7/site-packages/backports
__init__.py contains:
from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)

好的,很高兴你成功了。 脚本的输出现在显示了它们应该是的样子; 如果将来有人遇到此问题,希望该脚本可能有用。

我也有同样的问题。 从一开始就尝试了一切,卸载和安装一切。 还运行了您在上面共享的脚本 -
这是输出:

aranyo-139-61:Desktop shiva$ python debug_namespace_pkg.py
mod: <module 'backports' (built-in)>

backports.__path__ = ['/Users/shiva/Library/Python/2.7/lib/python/site-packages/backports']

Found /usr/local/lib/python2.7/site-packages/backports
__init__.py contains:
from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)


Found /Users/shiva/Library/Python/2.7/lib/python/site-packages/backports
No __init__.py found
Found /usr/local/lib/python2.7/site-packages/backports
__init__.py contains:
from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)

你能帮我解决这个问题吗? 不过我不想使用 conda。

谢谢!

/Users/shiva/Library/Python/2.7/lib/python/site-packages/backports中有什么东西吗? 您可以尝试删除/重命名它吗?

/Users/shiva/Library/Python/2.7/lib/python/site-packages/backports 中有什么东西吗? 您可以尝试删除/重命名它吗?

试过了,还是一样的问题。

我对调试脚本进行了更改,您可以尝试再次获取它并重新运行它。

这是输出 -

mod: <module 'backports' (built-in)>

backports.__path__ = ['/Users/shiva/Library/Python/2.7/lib/python/site-packages/backports']

-- Found /usr/local/lib/python2.7/site-packages/backports --
Files: ['__init__.py', '__init__.pyc', 'shutil_get_terminal_size']
__init__.py contains:
from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)


-- Found /usr/local/lib/python2.7/site-packages/backports --
Files: ['__init__.py', '__init__.pyc', 'shutil_get_terminal_size']
__init__.py contains:
from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)

自从删除/重命名该目录后,您是否重新启动了 Python? 它仍然以某种方式找到它。

我正在使用“python debug_namespace_pkg.py”命令运行脚本。 我在这样做之前重新启动了终端。

/Users/shiva/Library/Python/2.7/lib/python/site-packages/backports绝对不存在? 和以前一样,我不明白它是如何获得对显然不存在的文件夹的引用。

是的,我在您指定的位置重命名了它。 你确定你不是说/usr/local/lib/python2.7/site-packages/backports吗?

不,这是它需要找到的那个。 /Users/shiva下面的那个似乎以某种方式妨碍了它。 这一行表明它仍然以某种方式找到它:

backports.__path__ = ['/Users/shiva/Library/Python/2.7/lib/python/site-packages/backports']

但我不明白你删除它后怎么可能。 :使困惑:

啊哈,有件事我从来不知道: .pkg文件。 你能找到一个名为backports.pkg的文件吗?

backports.pkg可能会在其中一个site-packages目录中,尽管它可能在您系统上的其他地方)

我在任何地方都找不到 backports.pkg。 我在根文件夹中使用了 find ./* -name backports.pkg 。

最后,它奏效了。

重命名该文件夹不起作用,删除它。 非常感谢你的帮助 :)

奇怪,我不明白为什么删除它与重命名它会有所不同。 很高兴你让它工作,无论如何。

我遇到了类似的问题,并且 pip 卸载/安装东西似乎没有帮助。 这是您的调试脚本的输出(由于python test.py ):

mod: <module 'backports' (built-in)>

backports.__path__ = ['/home/ihincks/.local/lib/python2.7/site-packages/backports']

-- Found /usr/local/lib/python2.7/dist-packages/backports --
Files: ['__init__.py', '__init__.pyc', 'shutil_get_terminal_size']
__init__.py contains:
from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)

我有:

$ ls /home/ihincks/.local/lib/python2.7/site-packages/ | grep backports
backports_abc-0.5.dist-info
backports_abc.py
backports_abc.pyc
backports.shutil_get_terminal_size-1.0.0

我最终通过以下 hack 方法让它工作。 打开(在 linux 上) /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

同样的事情 - 不知何故,它找到了一个似乎不存在的目录。 您也可以查找backport.pkg文件吗? 我会把它添加到脚本中。

最新脚本的输出:

mod: <module 'backports' (built-in)>

backports.__path__ = ['/home/ihincks/.local/lib/python2.7/site-packages/backports']

-- Found /usr/local/lib/python2.7/dist-packages/backports --
Files: ['__init__.py', '__init__.pyc', 'shutil_get_terminal_size']
__init__.py contains:
from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)

这真令人气愤; 我不知道它是如何找到第一条路径( /home/ihincks/... )的。

/home/ihincks/.local/lib/python2.7/site-packages/中还有其他什么可以解释为什么它在那里找到backports吗?

我不知道到底要找什么。 这是/home/ihincks/.local/lib/python2.7/site-packages/中的所有内容:

backports_abc-0.5.dist-info
backports_abc.py
backports_abc.pyc
backports.shutil_get_terminal_size-1.0.0
bleach
bleach-1.5.0.dist-info
certifi
certifi-2016.9.26.dist-info
configparser-3.5.0.dist-info
configparser-3.5.0-nspkg.pth
configparser.py
configparser.pyc
entrypoints-0.2.2.dist-info
entrypoints.py
entrypoints.pyc
enum
enum34-1.1.6.dist-info
functools32
functools32-3.2.3.post2.dist-info
html5lib
html5lib-0.9999999.dist-info
ipykernel
ipykernel-4.5.2.dist-info
ipython_genutils
ipython_genutils-0.1.0.dist-info
ipywidgets
ipywidgets-5.2.2.dist-info
jinja2
Jinja2-2.8.dist-info
jsonschema
jsonschema-2.5.1.dist-info
jupyter_client
jupyter_client-4.4.0.dist-info
jupyter_console
jupyter_console-5.0.0.dist-info
jupyter_core
jupyter_core-4.2.1.dist-info
markupsafe
MarkupSafe-0.23.dist-info
mistune-0.7.3.dist-info
mistune.py
mistune.pyc
nbconvert
nbconvert-5.0.0.dist-info
nbformat
nbformat-4.2.0.dist-info
pandocfilters-1.4.1.dist-info
pandocfilters.py
pandocfilters.pyc
pexpect
pexpect-4.2.1.dist-info
pickleshare-0.7.4.dist-info
pickleshare.py
pickleshare.pyc
prompt_toolkit
prompt_toolkit-1.0.9.dist-info
ptyprocess
ptyprocess-0.5.1.dist-info
pyzmq-16.0.2.dist-info
qtconsole
qtconsole-4.2.1.dist-info
simplegeneric-0.8.1.dist-info
simplegeneric.py
simplegeneric.pyc
singledispatch-3.4.0.3.dist-info
singledispatch_helpers.py
singledispatch_helpers.pyc
singledispatch.py
singledispatch.pyc
six-1.10.0.dist-info
six.py
six.pyc
terminado
terminado-0.6.dist-info
testpath
testpath-0.3.dist-info
tornado
tornado-4.4.2.dist-info
traitlets
traitlets-4.3.1.dist-info
wcwidth
wcwidth-0.1.7.dist-info
widgetsnbextension
widgetsnbextension-1.2.6.dist-info
zmq

backports.shutil_get_terminal_size-1.0.0是什么,里面有什么?

它是一个 python 包,它似乎在backports.shutil_get_terminal_size中公开了单个函数get_terminal_size #$ 。 该文件夹具有以下结构:

./
├── backports
│   ├── __init__.py
│   └── shutil_get_terminal_size
│       ├── get_terminal_size.py
│       └── __init__.py
├── backports.shutil_get_terminal_size.egg-info
│   ├── dependency_links.txt
│   ├── PKG-INFO
│   ├── SOURCES.txt
│   └── top_level.txt
├── HISTORY.rst
├── LICENSE
├── MANIFEST.in
├── PKG-INFO
├── README.rst
├── setup.cfg
├── setup.py
├── test_shutil_get_terminal_size.py
└── tox.ini

PKG-INFO的内容是:

Metadata-Version: 1.1
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]
License: MIT
Description: backports.shutil_get_terminal_size
        ==================================

        A backport of the `get_terminal_size`_ function from Python 3.3's shutil.

        Unlike the original version it is written in pure Python rather than C,
        so it might be a tiny bit slower.

        .. _get_terminal_size: https://docs.python.org/3/library/shutil.html#shutil.get_terminal_size


        Example usage
        -------------

            >>> from backports.shutil_get_terminal_size import get_terminal_size
            >>> get_terminal_size()
            terminal_size(columns=105, lines=33)



        History
        =======

        1.0.0 (2014-08-19)
        ------------------

        First release.

Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 2.6
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3.2

啊,好吧,我猜你在某个时候手动解压了 sdist。 删除整个目录 ( backports.shutil_get_terminal_size-1.0.0 ) 有什么不同吗? 我猜这只是一个红鲱鱼。

好的,将/usr/local/lib/python2.7/dist-packages/IPython/utils/terminal.py恢复为原始形式。 跑ipython并得到ImportError: No module named shutil_get_terminal_size错误。

然后将文件夹/home/ihincks/.local/lib/python2.7/site-packages/backports.shutil_get_terminal_size-1.0.0 /home/ihincks 。 再次运行ipython ,出现同样的错误。

好的,所以那个文件夹只是一个红鲱鱼,我仍然不知道它是如何找到/home/ihincks/.local/lib/python2.7/site-packages/backports的:-(

嗯,希望我能提供更多帮助,我只明白发生了什么; python 路径/库安装的东西通常让我感到困惑。

没问题,这似乎是一些隐藏得相当好的黑魔法。

如果有人可以在他们不介意让我 ssh 访问并尝试了解发生了什么的系统上复制它,请与我们联系。

我也遇到了同样的问题.......我最近安装了 jupyter,当我尝试打开 ipython 笔记本文件时,它说内核已死,并出现 backports.shutil_get_terminal_size 的导入错误。 最后,我在升级 pip 后解决了这个问题,重新安装了 jupyter 和 backports.shutil-get-terminal-size 几次......最后运行这个命令:python2 -m ipykernel install --user。 这给了我的内核生命。 参考: http ://askubuntu.com/questions/847263/install-jupyter-for-python-2-7-in-ubuntu-14-04

所以我遇到了这个问题,在检查 /usr/lib/python2.7/site-packages/backports.shutil_get_terminal_size-1.0.0.dist-info 时,我发现只有:

total 28
-rw-r--r--. 1 root root  596 Feb 27 10:42 DESCRIPTION.rst
-rw-r--r--. 1 root root    4 Feb 27 10:42 INSTALLER
-rw-r--r--. 1 root root 1175 Feb 27 10:42 METADATA
-rw-r--r--. 1 root root  701 Feb 27 10:42 metadata.json
-rw-r--r--. 1 root root 1455 Feb 27 10:42 RECORD
-rw-r--r--. 1 root root   10 Feb 27 10:42 top_level.txt
-rw-r--r--. 1 root root  110 Feb 27 10:42 WHEEL

并且没有什么可导入的。 这在 pip --upgrade、pip 卸载/安装 ipython 等之后。 所以看起来 pip 实际上并没有安装包,只是轮子。 我下载了 .tar.gz 文件,将其复制到 wheel 目录中,该目录修复了我在 ipython 中遇到的问题。 不是修复它的正确方法。 我在 RHEL7 中运行,所以这可能与它有关。

.dist-info结尾的目录是关于已安装包的元数据文件,它并不意味着包含任何可导入的内容。 代码应位于相邻目录中: /usr/lib/python2.7/site-packages/backports

也许代码可以帮助你: pip install --user backports.shutil_get_terminal_size ,如果你的 ipython 对 root 或其他用户来说可以,只需为当前用户安装它。

大家好,

如果你们试图解决这个问题

pip install backports.shutil_get_terminal_size

但它没有用。

最好的方法是检查你的系统路径

import sys
print sys.path

在ipython模型的正确路径之前检查每个路径是否有backports包并直接删除。

我有这个错误的一个非常奇怪的版本:

pde<strong i="6">@damoclid</strong>:~$ 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
pde<strong i="7">@damoclid</strong>:~$ python
Python 2.7.13 (default, Jan 19 2017, 14:48:08) 
[GCC 6.3.0 20170118] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> 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
>>> import sys
>>> print [p for p in sys.path if os.path.exists(p + "/backports")]
['/usr/lib/python2.7/dist-packages']
>>> import backports
>>> backports.__path__
['/usr/local/lib/python2.7/dist-packages/backports']
>>> os.path.exists("/usr/local/lib/python2.7/dist-packages/backports")
False
>>> dir(backports)
['__doc__', '__name__', '__path__']
>>> 
pde<strong i="8">@damoclid</strong>:~$ cd /usr/local/bin/
pde<strong i="9">@damoclid</strong>:/usr/local/bin$ cd ..
pde<strong i="10">@damoclid</strong>:/usr/local$ sudo find . -iname \*backports\*
pde<strong i="11">@damoclid</strong>:/usr/local$

真的不知道为什么 python 没有找到打包的本机操作系统backports / backports.shutil_get_terminal_size ,或者为什么它在 /usr/local 中找到了backports的幽灵版本/库。 我的sys.path是:

['', '/usr/lib/python2.7/dist-packages', '/usr/local/lib/python2.7/dist-packages/ropevim-0.7.0-py2.7.egg', '/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/pde/.local/lib/python2.7/site-packages', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/PILcompat', '/usr/lib/python2.7/dist-packages/gtk-2.0', '/usr/lib/pymodules/python2.7', '/usr/lib/python2.7/dist-packages/wx-3.0-gtk2']

pde<strong i="13">@damoclid</strong>:/usr/local$ ls -ld `dpkg -L python-backports-shutil-get-terminal-size `
drwxr-xr-x   26 root root   4096 Mar  7 23:01 /./
drwxr-xr-x   12 root root   4096 Apr  5  2014 /usr/
drwxr-xr-x  201 root root  36864 May 14 22:01 /usr/lib/
drwxr-xr-x   27 root root  20480 Apr  4 15:53 /usr/lib/python2.7/
drwxr-xr-x  296 root root  20480 May 15 18:02 /usr/lib/python2.7/dist-packages/
drwxr-xr-x    3 root root   4096 May 15 17:35 /usr/lib/python2.7/dist-packages/backports/
-rw-r--r--    1 root root     75 Aug 19  2014 /usr/lib/python2.7/dist-packages/backports/__init__.py
drwxr-xr-x    2 root root   4096 May 15 17:35 /usr/lib/python2.7/dist-packages/backports/shutil_get_terminal_size/
drwxr-xr-x    2 root root   4096 May 15 17:35 /usr/lib/python2.7/dist-packages/backports.shutil_get_terminal_size-1.0.0.egg-info/
-rw-r--r--    1 root root      1 Jul 28  2016 /usr/lib/python2.7/dist-packages/backports.shutil_get_terminal_size-1.0.0.egg-info/dependency_links.txt
-rw-r--r--    1 root root   1402 Jul 28  2016 /usr/lib/python2.7/dist-packages/backports.shutil_get_terminal_size-1.0.0.egg-info/PKG-INFO
-rw-r--r--    1 root root     10 Jul 28  2016 /usr/lib/python2.7/dist-packages/backports.shutil_get_terminal_size-1.0.0.egg-info/top_level.txt
-rw-r--r--    1 root root   2913 Aug 19  2014 /usr/lib/python2.7/dist-packages/backports/shutil_get_terminal_size/get_terminal_size.py
-rw-r--r--    1 root root    338 Aug 19  2014 /usr/lib/python2.7/dist-packages/backports/shutil_get_terminal_size/__init__.py
drwxr-xr-x  398 root root  12288 May 14 22:01 /usr/share/
drwxr-xr-x 3114 root root 126976 May 15 18:02 /usr/share/doc/
drwxr-xr-x    2 root root   4096 May 15 17:35 /usr/share/doc/python-backports-shutil-get-terminal-size/
-rw-r--r--    1 root root    333 Jul 28  2016 /usr/share/doc/python-backports-shutil-get-terminal-size/changelog.Debian.gz
-rw-r--r--    1 root root     71 Aug 19  2014 /usr/share/doc/python-backports-shutil-get-terminal-size/changelog.gz
-rw-r--r--    1 root root   1372 Jul 28  2016 /usr/share/doc/python-backports-shutil-get-terminal-size/copyright

我将重新打开并标记为 5.4 我认为我们应该供应商shutil_get_terminal_size以确保安全。

@Carreau fwiw 感觉这里可能存在 pip 或 python 错误,或者我做了一些愚蠢的事情,或者两者兼而有之。 将通过一些更有知识的点子人来运行它。

另一种情况是它找到了一个实际上并不存在的backports包。 一些人报告了类似的事情,但我也无法弄清楚它来自哪里。 你能试试运行这个脚本吗? 并四处寻找可能会影响它的.pkg.pth文件。

@Carreau在我的系统上,问题原来是configparser模块的存在:

pde<strong i="8">@damoclid</strong>:~/aip$ sudo grep backport `locate *.pth`
/usr/local/lib/python2.7/dist-packages/configparser-3.5.0-nspkg.pth:import sys, types, os;p = os.path.join(sys._getframe(1).f_locals['sitedir'], *('backports',));ie = os.path.exists(os.path.join(p,'__init__.py'));m = not ie and sys.modules.setdefault('backports', types.ModuleType('backports'));mp = (m or []) and m.__dict__.setdefault('__path__',[]);(p not in mp) and mp.append(p)
pde<strong i="9">@damoclid</strong>:~/aip$ pip freeze | grep configp
configparser==3.3.0.post2
pde<strong i="10">@damoclid</strong>:~/aip$ cd /usr/local/lib/
pde<strong i="11">@damoclid</strong>:/usr/local/lib$ find . -iname *configp*
./python2.7/dist-packages/configparser-3.5.0.dist-info
./python2.7/dist-packages/future/moves/configparser.py
./python2.7/dist-packages/future/moves/configparser.pyc
./python2.7/dist-packages/configparser.py
./python2.7/dist-packages/configparser-3.5.0-nspkg.pth
./python2.7/dist-packages/configparser.pyc
pde<strong i="12">@damoclid</strong>:/usr/local/lib$ sudo pip uninstall configparser
Not uninstalling configparser at /usr/lib/python2.7/dist-packages, outside environment /usr
pde<strong i="13">@damoclid</strong>:/usr/local/lib$ sudo rm -rf `find . -iname *configp*`
pde<strong i="14">@damoclid</strong>:/usr/local/lib$ ipython
Python 2.7.13 (default, Jan 19 2017, 14:48:08) 
Type "copyright", "credits" or "license" for more information.

IPython 5.1.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]:                                                                                                                                                                 
Do you really want to exit ([y]/n)? y

感谢@erikrose帮助调试这个。

关闭为 #10587 供应商这个东西和 IPython 5.4 应该很快发布

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