Ipython: Nenhum módulo denominado shutil_get_terminal_size

Criado em 23 jun. 2016  ·  71Comentários  ·  Fonte: ipython/ipython

Dia bom,
Estou contribuindo com um pequeno projeto para criar um kernel no topo do ipykernel. Já faz um tempo desde que eu toquei nele e hoje, quando implantei um novo ambiente de desenvolvimento instalando o Jupyter, obtive o seguinte rastreamento de pilha ao chamar 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

Obviamente, algo mudou desde meu último uso de IPython e ipykernel. Alguma ideia sobre qual é o problema? Estou trabalhando em uma caixa OSX com Python 2.7.10.

Atenciosamente, Aurélien

Comentários muito úteis

Parece que você instalou o IPython sem obter suas dependências de alguma forma. Visto que vejo ovos, isso provavelmente significa que você tem uma versão muito antiga das ferramentas de instalação e pode estar usando easy_install . Em primeiro lugar, certifique-se de ter pip / setuptools relativamente recentes:

pip install --upgrade setuptools pip

Em seguida, tente reinstalar o IPython com pip (nunca use easy_install, a menos que você saiba que há uma boa razão para que o pip não funcione / não funcione. Esses casos são raros):

pip uninstall ipython
pip install ipython

Todos 71 comentários

Parece que você instalou o IPython sem obter suas dependências de alguma forma. Visto que vejo ovos, isso provavelmente significa que você tem uma versão muito antiga das ferramentas de instalação e pode estar usando easy_install . Em primeiro lugar, certifique-se de ter pip / setuptools relativamente recentes:

pip install --upgrade setuptools pip

Em seguida, tente reinstalar o IPython com pip (nunca use easy_install, a menos que você saiba que há uma boa razão para que o pip não funcione / não funcione. Esses casos são raros):

pip uninstall ipython
pip install ipython

Especificamente neste caso, adicionamos uma dependência no pacote backports.shutil_get_terminal_size .

Obrigado pelo seu feedback rápido! No entanto, o mistério se aprofunda. Parece que a instalação Jupyter através pip na linha de comando produz um resultado diferente do que ter Jupyter conjunto como uma exigência ao usar setuptools. Enquanto a primeira abordagem é bem-sucedida, a segunda falha para mim. Aqui estão as etapas para reproduzir esse problema:

Primeiro, começamos com um interpretador básico do Python 2.7.11, com apenas três pacotes instalados:

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

Se eu instalar o Jupyter usando pip, tudo funcionará bem e recebo os seguintes pacotes:

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

No entanto, se eu tentar instalar o Jupyter como um requisito para um projeto tendo o seguinte script setup.py (observe que eu reinicio de um novo interpretador 2.7.11 com os três módulos básicos pip , setuptools e virtualenv ):

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

... então falha:

$ 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

Curiosamente, ao listar os pacotes que _did_ foram instalados, podemos ver que ipython e jupyter-console são agora a versão 5.0.0b4 e 5.0.0b1, respectivamente, em vez de 4.2.0 e 4.1.1 como acima ao instalar o Jupyter com pip . Aqui estão os pacotes:

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

Posso estar faltando alguma coisa aqui, mas não tenho certeza do quê. Alguma idéia de por que ter jupyter como uma dependência em um script de setuptools setup.py falha aqui?

Melhor,
Aurélien

Isso sugere que talvez o setuptools esteja obtendo uma versão diferente quando importado do que o pip está listando (um bug conhecido causado por setuptools antigos). O que você obtém de:

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

E também:

python -m site

Também é algo que pode não ser familiar que, se você usar setuptools em setup.py, nunca deve fazer python setup.py install , apenas pip install . .

Aqui estão os resultados:

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

e

$ 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

Também é algo que pode não ser familiar que, se você usar setuptools em setup.py, nunca deve fazer python setup.py install , apenas pip install . .

Isso é muito interessante e pode ser o sinal de que preciso atualizar meus conhecimentos sobre ferramentas de pip install . na pasta que contém meu script setup.py acima, fui capaz de instalar o Jupyter e suas dependências com sucesso. Obrigado!

Como pergunta lateral, por que não funcionou com python setup.py install ? Não consegui encontrar nenhuma referência online sobre por que isso pode ser um problema.

Atenciosamente, Aurélien

python setup.py install faz a mesma coisa que easy_install. easy_install faz muitas coisas desagradáveis, que são a razão pela qual o pip foi criado. Por razões de compatibilidade com versões anteriores, python setup.py install com ferramentas de configuração importadas sempre fará as coisas indesejáveis ​​que easy_install faz e, portanto, nunca deve ser chamado.

Eu só recebo esse erro se instalar o ipython em um virtualvenv compartilhado no NFS. Alguma pista de por que a instalação em um venv no NFS pode causar esse problema?

Não sei por que o NFS faria a diferença, mas verifique a versão do pip dentro do virtualenv e, se não for a mais recente, tente atualizá-lo:

pip install --upgrade setuptools pip

@takluyver O mesmo pip que instala o ipython corretamente no sistema de arquivos "normal", não o instala corretamente no NFS. E sim, é a versão mais recente do pip.

Bizarro. Não tenho ideia de por que o NFS afetaria isso.

Também enfrentando esse problema com o Python 2.7 usando o pip (8.1.2) mais recente e o setuptools (25.1.6) mais recente. Não é possível que haja algo mais acontecendo?

Instalar backports.shutil_get_terminal_size com pip antemão foi uma solução alternativa eficaz para o problema.

Como mencionado em outro lugar, coloque PR (https://github.com/paulgb/runipy/pull/125) junto para mostrar o erro backports.shutil_get_terminal_size e entrypoints . O primeiro commit mostra o primeiro erro e o segundo commit mostra o segundo erro. Em ambos os casos, as primeiras 3 compilações de IC na matriz são de interesse. Todos os 3 usam setuptools para instalar tudo.

Parece um problema nas ferramentas de configuração. Instalar com pip (como sempre deve ser feito) vai consertar isso .

Não estou 100% certo do que o setuptools está deixando de fazer, no entanto.

Acabei de ter o mesmo tipo de problema ao instalar o IPython (não o Jupyter) em um virtualenv 2.7.3 novo. Parece que o IPython foi instalado, mas faltava pathlib2 e backports.shutil-get-terminal-size . Fazer pip install em cada um corrigiu as dependências e o IPython agora está funcionando.

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

Você pode fazer um pip --version ? Eu acho que você tem uma versão muito antiga do pip.

Sim você está correto. Eu estava no pip 1.4.1.

Repeti o exercício depois de atualizar meu virtualenv para o pip 8.1.2 e o IPython 5.0.0 instalado sem problemas.

$ 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

Também estou tendo este problema no 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

Tentei fazer sudo pip install --upgrade --force-reinstall ipython (bem como reinstalar o pip e as ferramentas de configuração) sem sucesso.

Depois de alguma investigação, acredito que o módulo backports.shutil_get_terminal_size si é o culpado:

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⟫

Curiosamente, o módulo backports parece instalar duas versões (ligeiramente diferentes ?!) de si mesmo:

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

e patching IPython / utils / terminal.py para usar shutil_backports.get_terminal_size funciona. Vai saber.

Olá,

Eu estava recebendo o mesmo erro no virtualenv. Eu estava usando o pip para instalar o jupyter.

eu estava conseguindo
ImportError: Nenhum módulo denominado shutil_get_terminal_size

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

Então, tentei fazer um upgrade. Mostrou:

_pip install --upgrade backports.shutil-get-terminal-size_
Requisito já atualizado: backports.shutil-get-terminal-size em /Library/Python/2.7/site-packages

Então, de alguma forma, ele estava acessando minhas bibliotecas globais e não a do meu venv.

Então, desinstalei backports.shutil-get-terminal-size do python global e instalei em meu venev. Agora está funcionando bem.

Posso reproduzir isso 100% do tempo com esta instalação

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

Posso reproduzir isso 0% do tempo com esta instalação

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

Observe que com --user a ferramenta python de linha de comando é instalada em ~/Library/Python/2.7/bin/ipython vez de /usr/local/bin

@AndrewHoos e para mim, os dois comandos obtêm as dependências corretamente. O que você ganha com pip --version ? Deve ser pelo menos 8. Se não for, certifique-se de que suas ferramentas de configuração e pip estejam atualizados:

pip install --upgrade setuptools pip

Esse problema ocorre com o notebook 4.2.2 e o ipython 5.1.0 instalados com conda . Conforme mencionado acima, o shutil_get_terminal_size já está instalado:

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

No entanto, no shell normal do python, o comando import backports.shutil_get_terminal_size falha.

Ok, encontrei uma solução crua, mas simples: desinstale e instale novamente. Agora o ipython funciona ....

$ 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

Também encontrei este problema
Infelizmente, nada acima ajudou muito, mas o problema é exatamente como relatado acima:

ImportError: Nenhum módulo denominado shutil_get_terminal_size

Desinstalar e instalar o IPython e portas traseiras não foi nenhuma alegria.

O problema era que eu tinha Jupyter e amigos instalados globalmente e shutil_get_terminal_size instalado globalmente. ou seja, em /Library/Python/2.7/site-packages/shutil_backports/

No entanto, eu também tinha backports.functools_lru_cache instalado localmente, isso na verdade bloqueou a importação de shutil_backports.

Para testar se este é o problema: ls ~ / Library / Python / 2.7 / lib / python / site-packages (No OSX, se você vir uma pasta de portas traseiras, provavelmente é a falha. Desinstalei a biblioteca da biblioteca do usuário e adicionado à biblioteca do sistema. De qualquer forma, você não pode misturar e combinar suas portas traseiras. Deve ser global ou local para funcionar totalmente.

Mesmo problema no Debian Sid (Unstable) totalmente atualizado. Eu atualizei o pip; tentou desinstalar e instalar novamente do novo; etc. Nada funcionou.

# 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

desinstalar e instalar backports.shutil_get_terminal_size funciona novamente.

+1 em osx. Mesmo problema, - Desinstale global e instale no virtualenv works e aponta para local.

@Hiczeke eu tentei isso e não funcionou

Depois de tentar várias coisas, o comando final que resolveu estava atualizando setuptools
Eu recomendaria:

  • Desinstale quaisquer pacotes de sistema, como o debian ipython e python-backports-shutil-get-terminal-size
  • Desinstale com pip: ipython , jupyter e backports.shutil_get_terminal_size
  • Atualizar pip e setuptools: pip install - atualizar ferramentas de configuração pip`
  • Reinstale o ipython (e outros) com pip: pip install ipython jupyter

O seguinte corrigiu o problema para mim:
pip uninstall backports.shutil_get_terminal_size
pip install backports.shutil_get_terminal_size

@ Paul-Richter @Hiczeke
Muito obrigado!
reinstalar "backports.shutil_get_terminal_size" funcionou bem para mim.

pip install --upgrade --force-reinstalar ipython

Isso corrigiu o problema no meu Mac

Estou bastante confuso:

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

Consertado para você, Ian.

sudo pip uninstall backports.shutil_get_ terminal _size

sudo pip install backports.shutil_get_ terminal _size

Na quarta-feira, 25 de janeiro de 2017 às 12h52, Ian Hincks [email protected]
escreveu:

Estou bastante confuso:

sudo pip uninstall backports.shutil_get_window_size

Não é possível desinstalar o requisito backports.shutil-get-window-size, não instalado

sudo pip install backports.shutil_get_window_size

Não foi possível encontrar uma versão que satisfaça o requisito backports.shutil_get_window_size (das versões:)
Nenhuma distribuição correspondente encontrada para backports.shutil_get_window_size

-
Você está recebendo isso porque foi mencionado.
Responda a este e-mail diretamente, visualize-o no GitHub
https://github.com/ipython/ipython/issues/9656#issuecomment-275197674 ,
ou silenciar o tópico
https://github.com/notifications/unsubscribe-auth/ATln0kDS_u6PaTk6Qunjc_oEtKCv_-cRks5rV5n7gaJpZM4I9MnS
.

@ Paul-Richter Ah, obrigado :)

Nenhuma das coisas de desinstalação / reinstalação funcionou para mim. O que funcionou para mim foi sugerido por @ternus em um comentário acima: abra (no linux) /usr/local/lib/python2.7/dist-packages/IPython/utils/terminal.py e mude a linha

from backports.shutil_get_terminal_size import get_terminal_size as _get_terminal_size

para

from shutil_backports import get_terminal_size as _get_terminal_size

@ihincks : Seu comentário resolveu meu problema no osx 😃

Me deparei com esse erro hoje no OS X 10.12.3. O seguinte foi resolvido:

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

Não acredito que seja um erro do ipython. Recomende o fechamento.

Tenho certeza de que não é um erro de IPython, mas gostaria de poder descobrir o que está realmente errado para que possamos oferecer às pessoas soluções melhores do que reinstalar + esperança ...

@ pierre-haessig Você salvou meu dia. Muito obrigado.

@ihincks Tentei todos os posts, mas nenhum funcionou. Foi só o seu que funcionou. Você é um salva-vidas :)

correção por ihincks também funciona no Windows 10

Espero que possa ajudar alguém.
no meu caso, descobri que a raiz do problema era a versão incorreta do 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

Não sei como isso pode ter acontecido porque não tenho nenhuma versão para python3.
Meu problema foi resolvido quando eu desinstalei o Python e removi as bibliotecas relacionadas

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

Reinstalei o python e certifique-se de que o pip tenha a versão e o local corretos.
pip 9.0.1 from /usr/local/lib/python2.7/site-packages (python 2.7)
pip2 install ipython

@ihincks

Esta é a única resposta certa para mim.

sudo pip uninstall backports.shutil_get_terminal_size
sudo pip install backports.shutil_get_terminal_size

Pip provavelmente não deve se acostumar com o sudo.
Usar sudo com pip é o que leva os sistemas a serem quebrados desta forma
o problema descreve.

Se você precisar usar o sudo, algo está errado com seu sistema.

M

>

@ihincks No FreeBSD apenas sua solução funcionou! Muito obrigado!

Para sua informação, encontrei o mesmo problema, mas só consegui contornar o problema shutil_get_terminal_size usando a opção --ignore-installed no pip. Sem ele, o pacote não seria reinstalado corretamente.

pip install --ignore-installed backports.shutil_get_terminal_size

A resposta de @AllanDaemon resolveu o problema para mim!

Enfrentou um problema semelhante e foi resolvido desinstalando e reinstalando backports.shutil_get_terminal_size

pip uninstall backports.shutil_get_terminal_size
pip install backports.shutil_get_terminal_size

Eu tive o mesmo problema.
Depois de tentar muitas soluções acima, finalmente descobri que o problema é devido à minha configuração $ PATH.
Talvez anteriormente eu tivesse usado a opção pip install --user , de modo que /home/jin/.local/lib/python2.7 estava em meu $ PATH, onde outra versão de backports existia.
Resolvi este problema excluindo a pasta .local/lib/python2.7 .

Para testar se é um problema com você $ PATH, você pode simplesmente tentar

import sys
print sys.path

O problema é causado por "backports" nos locais "Sistema" e "Usuário".
No meu macOS, instalei o shutil_get_terminal_size no sistema, mas tinha outro pacote instalado na minha casa de usuário. Esta pasta de usuário tem precedência e você não pesquisa no Sistema.
Instale todos os seus pacotes python, com --user é sábio.
Se você travar forçar uma reinstalação com --user:
pip install --ignore-installed backports.shutil_get_terminal_size --user
Isso provavelmente deve ser adicionado a alguns diagnósticos, pois me incomoda todas as vezes

backports é suposto ser um 'pacote de espaço de nomes', que pode ter subpacotes instalados em locais diferentes como aquele. Mas não parece estar funcionando de maneira confiável e não consigo descobrir por quê. Não consigo reproduzi-lo para depurar localmente e minhas tentativas de depurá-lo por meio de outras pessoas têm sido confusas.

@takluyver Você viu https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=843898 ? Os últimos 2-3 posts são interessantes.

Infelizmente, isso parece mais ou menos o que eu encontrei - algo está bagunçando o pacote de namespace backports , mas não podemos descobrir o que ou como. O Debian disse, com bastante razão, que não é problema deles se os pacotes instalados pelo pip quebram as coisas.

Eu comentei aqui https://github.com/chrippa/backports.shutil_get_terminal_size/issues/9#issuecomment -279021331 e referenciei acima sobre como encontrar uma diferença entre a instalação de roda e não roda (não binária) via pip, é que algo relevante?

Que tal vender como alternativa para a próxima versão do IPython?

Isso é algo que poderia ser transportado para o shutil do CPython?

Isso é algo que poderia ser transportado para o shutil do CPython?

Provavelmente não, já não estamos usando o pacote backport no IPython 6.0 / master, isso já está em todos os estábulos CPython que suportamos, e o problema só ocorre porque usamos o pacote backport no 2.7 já que isso não está no CPython 2.7 padrão.

Entendi. Obrigado @Carreau. Ainda bem que será apenas um problema temporário.

Excluir a instalação global, desinstalar no virtualenv e reinstalar no virtualenv corrigiu o problema para mim.

O que você precisa apenas digitar os comandos abaixo:

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

Eu costumava ter o mesmo problema, e isso resolve.

Oi
mesmo problema no Ubuntu 17.10 com ipython2.
Nenhum problema com python3

CORREÇÃO: 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, por favor, não aconselhe as pessoas a usar sudo pip , isso só vai quebrar seu sistema de uma forma mais estranha no longo prazo. Pip vai lutar com o gerenciador de pacotes do sistema por alguns arquivos.

Isso é o equivalente a remover a bateria do alarme de monóxido de carbono porque ele o acorda regularmente à noite. Há algo errado com o seu aquecedor; você precisa de uma correção adequada.

Obrigado @Carreau
Corrigirei minha resposta depois de ter apagado o incêndio em minha casa.

Ps por favor, conserte o "heather" -> dependências de deb

A correção mais fácil é provavelmente instalar uma versão mais recente do IPython com pip install --user ipython (o sinalizador --user significa que não precisa do sudo). Já contornamos esse problema no IPython, mas não podemos controlar os pacotes Debian e os usuários que instalam através do apt obtêm uma versão desatualizada do IPython.

Caso alguém encontre o mesmo problema com Cygwin e python2, a solução é executar Cygwin setup.exe (ou um dos utls apt-cyg) e instalar python2-backports.shutil_get_terminal_size . Isso não é acionado como uma dependência por padrão, portanto, precisa ser instalado manualmente.

ipython3 está pronto para uso.

Esta página foi útil?
0 / 5 - 0 avaliações