【问题标题】:IPython console can't locate "backports.shutil_get_terminal_size" and won't loadIPython 控制台找不到“backports.shutil_get_terminal_size”并且不会加载
【发布时间】:2016-09-10 23:24:42
【问题描述】:

我在 Windows 10 上运行 Python2.7,使用 Anaconda 进行 env 和大多数 pkg 管理。在升级了许多软件包后,我的 ipython 控制台现在无法在任何 IDE 或控制台中启动。当我尝试在控制台上运行它时,出现此错误:

Traceback (most recent call last):
File "C:\Anaconda3\Scripts\ipython-script.py", line 3, in <module>
import IPython
File "C:\Anaconda3\lib\site-packages\IPython\__init__.py", line 48, in  <module>
from .core.application import Application
File "C:\Anaconda3\lib\site-packages\IPython\core\application.py", line 24, in <module>
from IPython.core import release, crashhandler
File "C:\Anaconda3\lib\site-packages\IPython\core\crashhandler.py", line 28, in <module>
from IPython.core import ultratb
File "C:\Anaconda3\lib\site-packages\IPython\core\ultratb.py", line 121, in <module>
from IPython.utils.terminal import get_terminal_size
File "C:\Anaconda3\lib\site-packages\IPython\utils\terminal.py", line 27, in <module>
import backports.shutil_get_terminal_size
ImportError: No module named backports.shutil_get_terminal_size

我尝试做的第一件事是:

pip install --upgrade backports.shutil_get_terminal_size

输出:

Requirement already up-to-date: backports.shutil_get_terminal_size in c:\anaconda3\lib\site-packages

我已经卸载并重新安装了两个 ipython

conda uninstall ipython
conda install ipython

pip uninstall ipython
pip install ipython

还是不行。请帮忙!

【问题讨论】:

  • 尝试pip uninstall backports.shutil_get_terminal_size,然后重新安装。如果它仍然无法播放,请检查C:\Anaconda3\lib\site-packages 是否存在 backports 文件夹。
  • 已修复。谢谢你,我的朋友。

标签: python python-2.7 terminal ipython anaconda


【解决方案1】:

试试这个

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

【讨论】:

  • 稍微解释一下它的实际作用会有所帮助。
  • 谢谢。为我工作。但解释会有所帮助。
  • Conda 频道是 conda 包的“存储库”。 conda-forge 是大量社区维护的软件包。之所以在此处添加,是因为 backports.shutil_get_terminal_size 尚未打包在默认的 conda 通道中。
  • 为什么我们需要一个非官方的软件包才能让官方安装工作?
  • 如果您不想将conda-forge 永久添加到您的 conda 配置中,conda install -c conda-forge backports.shutil_get_terminal_size 将仅用于该安装。
【解决方案2】:

我在 CentOS 7 上,我需要更改我的 terminal.py,如下所示。

在导入语句中,我弄乱了前缀并让它工作 -

import os
import sys
import warnings
try:
  from backports import get_terminal_size as _get_terminal_size
except ImportError:
  # use backport on Python 2
  from shutil_backports import get_terminal_size as _get_terminal_size

【讨论】:

  • 谢谢,这个成功了。似乎相同的修复已经添加到即将推出的 5.0.0 iPython(仍处于测试阶段)中:github.com/ipython/ipython/commit/…
  • 对我没有用。它无法从backports 加载get_terminal_size,并且在任何地方都找不到库shutil_backports。还试图让官方 IPython 发行版正常工作....
【解决方案3】:

根据this thread,这是由于bug in conda 导致与 pip 安装发生冲突,可以通过强制重新安装来解决。对于线程作者,$ conda install --force ipython 解决了这个问题,对我来说是$ conda install --force backports

【讨论】:

    【解决方案4】:
    • 适用于 Anaconda Python 版本 Anaconda2-4.2.0-Linux-x86_64.sh
    • 编辑文件并去掉“try”和“except”导入语句
    • 添加新的导入语句
    • 更新配置解析器 => ./conda install configparser
    • 安装 nbbrowserpdf => .pip install nbbrowserpdf

      vim +22 /home/alienone/anaconda2/lib/python2.7/site-packages/IPython/utils/terminal.py

      从反向端口导入 shutil_get_terminal_size 作为 _get_terminal_size

    【讨论】:

      【解决方案5】:

      唯一对我有用的是从 pypi 下载 tarball 并运行 python setup.py install

      效果很好

      【讨论】:

        【解决方案6】:

        在这种情况下,Virtualenv 可以证明是非常有用的,更具体地说,是不允许全局站点包的 virtualenv。只需在隔离的 virtualenv 中进行全新安装即可排除许多原因。

        根据我的经验,IPython 及其依赖项确实希望位于同一个站点中。如果您全局安装了 backports 包,但在用户漫游站点中安装了 IPython,您可能会遇到运行时导入错误,例如 OP 中描述的错误。

        我意识到有时我们需要全局站点包,但代价是更复杂的site 和 pip/setuptools 中的依赖处理。根据几个 python 配置和 windows 环境条件,您的包可能分布在全球站点、用户(漫游)站点和 virtualenv 站点。

        通过在无法访问全局或用户包的虚拟环境中构建和安装 clean 来排除奇怪的 site 问题。 virtualenvwrapper 和add2virtualenv 命令可用于完全允许某些全局包。

        【讨论】:

          【解决方案7】:

          如果这对任何人都有帮助,我的问题似乎是在本地使用 pip 安装了configparser,然后尝试使用 conda 安装其他所有东西。修复:

          pip uninstall configparser
          # You may need to install configparser now using conda...
          ipython
          # No ImportError now.
          

          似乎 configparser 安装在导入命名空间中放置了一个 backports 包,它优先于 conda 安装包。

          【讨论】:

            猜你喜欢
            • 2016-02-22
            • 2018-03-28
            • 2020-11-24
            • 2015-06-04
            • 1970-01-01
            • 2011-05-06
            • 1970-01-01
            • 2017-07-26
            • 2018-01-21
            相关资源
            最近更新 更多