Ipython: ImportError: Nenhum módulo chamado shutil_get_terminal_size

Criado em 28 jul. 2016  ·  81Comentários  ·  Fonte: ipython/ipython

Atualização do @carreau :
Reabrindo, marcando 5.4 devemos fornecedor shutil_get_terminal_size.


Após instalar o ipython sudo apt-get install ipython-notebook , ipython aparece um erro, da seguinte forma:

jiangyuping@Lenovo :~$ ipython
Traceback (última chamada mais recente):
Arquivo "/usr/local/bin/ipython", linha 4, em
do IPython import start_ipython
Arquivo " /usr/local/lib/python2.7/dist-packages/IPython/init .py", linha 48, em
do aplicativo de importação .core.application
Arquivo "/usr/local/lib/python2.7/dist-packages/IPython/core/application.py", linha 25, em
da versão de importação do IPython.core, crashhandler
Arquivo "/usr/local/lib/python2.7/dist-packages/IPython/core/crashhandler.py", linha 28, em
de IPython.core importar ultratb
Arquivo "/usr/local/lib/python2.7/dist-packages/IPython/core/ultratb.py", linha 128, em
de IPython.utils.terminal importação get_terminal_size
Arquivo "/usr/local/lib/python2.7/dist-packages/IPython/utils/terminal.py", linha 22, em
de backports.shutil_get_terminal_size importe get_terminal_size como _get_terminal_size
ImportError: Nenhum módulo chamado shutil_get_terminal_size

Comentários muito úteis

@oschow isso _deve_ funcionar em geral:

# 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

Todos 81 comentários

Você tem uma cópia mais recente do IPython instalada fora do apt e requer o pacote backports.shutil_get_terminal_size . Use pip para instalar isso.

@takluyver Depois de pip install ipython , aparece

jiangyuping@Lenovo :~/ipython$ pip install ipython
Requisito já satisfeito (use --upgrade para atualizar): ipython em /usr/local/lib/python2.7/dist-packages

então, ipython , aparece

jiangyuping@Lenovo :~/ipython$ ipython
Traceback (última chamada mais recente):
Arquivo "/usr/local/bin/ipython", linha 4, em
do IPython import start_ipython
Arquivo "/home/jiangyuping/ipython/IPython/ init .py", linha 48, em
do aplicativo de importação .core.application
Arquivo "/home/jiangyuping/ipython/IPython/core/application.py", linha 25, em
da versão de importação do IPython.core, crashhandler
Arquivo "/home/jiangyuping/ipython/IPython/core/crashhandler.py", linha 28, em
de IPython.core importar ultratb
Arquivo "/home/jiangyuping/ipython/IPython/core/ultratb.py", linha 128, em
de IPython.utils.terminal importação get_terminal_size
Arquivo "/home/jiangyuping/ipython/IPython/utils/terminal.py", linha 22, em
de backports.shutil_get_terminal_size importe get_terminal_size como _get_terminal_size
ImportError: Nenhum módulo chamado shutil_get_terminal_size

Eu quis dizer:

pip install backports.shutil_get_terminal_size

No entanto, se não estiver trazendo isso como uma dependência do IPython, isso provavelmente significa que você tem uma versão antiga do pip. Para atualizá-lo:

pip install --upgrade setuptools pip

Obrigado, instalado com sucesso.

Eu tentei muitas coisas. O último que resolveu foi atualizar setuptools . Também atualizei o pip e reinstalei o ipython, etc.

Obrigado! Isto não funcionou para mim. Mas isso me deu uma ideia... fiz uma instalação do pip --atualizei com um arquivo whl do backports.shutil_get_terminal_size

Antes disso, simplesmente fazer uma instalação do pip resultava em "requisito já satisfeito" etc.
Agora posso executar o GraphLab Create de Turi :)

@jnault Estou tendo o mesmo problema porque tentei instalar o GraphLab Create da Turi. Quais comandos exatos você usou?

Não me lembro exatamente, mas lembro que é bem fácil. Meus passos:
1) Pesquise no Google esse arquivo com a extensão .whl e
2) Pesquisa do Google Como instalar um arquivo whl
hum. ok isso parece sarcástico ou algo assim. Eu estou sendo sincero e tentando ajudar. Mas isso é literalmente o que eu fiz. Tenho certeza que o arquivo veio de Pypi. Eu estou supondo que um arquivo whl poderia instalar qualquer coisa, então eu me certifiquei de que ele veio de uma fonte respeitável.
Eu estou supondo que o comando foi: pip install --upgrade backports.shutil_get_terminal_size.whl

@oschow isso _deve_ funcionar em geral:

# 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 tem conselhos melhores.
Minrk, você escreveu "se pip acha que você já tem, mas não parece". Então, é possível que o arquivo tenha sido agendado na instalação inicial do python, mas depois perdido? Assim, é listado como presente, mas realmente não é?

Eu tive o mesmo problema ao tentar instalar o Graphlab Create. A solução de minrk corrigiu isso para mim também.

@minrk teve a solução de trabalho para mim, apenas uma desinstalação seguida de uma instalação funcionou para mim.
Aqui está o que eu fiz.

desinstale se o pip achar que você já o possui, mas não parece:

pip desinstalar backports.shutil_get_terminal_size

instale-o novamente com o pip definitivamente atualizado:

pip install --upgrade backports.shutil_get_terminal_size

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

@bevice E então?

Até agora não consegui corrigir com nenhuma das sugestões deste tópico ou de qualquer outro tópico.

Se eu correr

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

funciona. Mas executar o notebook ipython ou jupyter me dá o mesmo erro, que não encontra shutil_get_terminal_size

Eu acho que isso significa que você tem outro pacote backports.<something> instalado em algum lugar que bagunçou o maquinário do pacote de namespace. Você provavelmente precisará encontrá-lo e desinstalá-lo. Tente pip list para ver todos os pacotes instalados.

@takluyver Obrigado pela resposta rápida.

Isto é o que eu encontrei:

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

O que eu posso fazer agora?

Desinstale backports.ssl-match-hostname e backports.shutil-get-terminal-size e instale-os novamente.

Eu tenho que "reiniciar" o anaconda ou algo assim para que as alterações entrem em vigor? Desinstalar ambos os pacotes que você mencionou e reinstalá-los não funcionou.

Não, não há recomeço. Só para ter certeza, porém, depois de desinstalá-los, tente desinstalar novamente. Repita até que não encontre nada para desinstalar. Às vezes, há cópias em lugares diferentes.

Se isso ainda não estiver funcionando, tente desinstalar backports.ssl-match-hostname e deixá-lo desinstalado (pelo menos até encontrar o que precisa...)

Tudo bem. Eu tentei tudo que você disse, mas nada funciona. Quais são minhas opções? O problema começou quando instalei o pymc3. A outra coisa é que alterei alguns scripts para adicionar alguns módulos à caixa de ferramentas do nipype. Devo apenas remover tudo e instalá-lo novamente? Este seria o último recurso, espero.

O que você ganha tentando isso no mesmo Python com o qual está tentando executar o IPython:

import backports
print(backports)

Eu o executei com backports instalados:

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

Em seguida, desinstalei-os e executei novamente:

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

Então, aparentemente, eu tenho alguns pacotes embutidos em algum lugar que estão estragando as coisas. Mas não faço ideia de como encontrá-los. Mesmo que eu os encontre, talvez não consiga alterar nada, pois não tenho permissões de root.

Há mais alguma coisa na pasta que lhe mostrou lá ( /nobackup/archimedes1/Glad/anaconda2_serverwide/lib/python2.7/site-packages/backports/ )?

Não, agora que foi desinstalado, a pasta está completamente ausente. Como é a pasta
../site-packages/backports.shutil-get-terminal-size-1.0.0 que estava lá quando foi instalado.

Você pode verificar backports.__path__ em Python?

Sem backports instalados:
['/nobackup/archimedes1/Glad/anaconda2_serverwide/lib/python2.7/site-packages/backports']

Esse é o mesmo diretório de antes? Definitivamente está faltando? Eu não entendo como poderia encontrar esse caminho se não há nada lá.

Procurei todos os backports possíveis no diretório anaconda2_serverwide. Não tenho certeza do que tudo isso significa.
Isto é o que eu encontrei:

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

Você reiniciou o Python após desinstalar backports ? Se não, você pode reiniciar o Python e verificar backports.__path__ novamente? Não conheço nenhuma maneira de identificar esse caminho se não houver nenhum arquivo lá.

Como reinicio o python?

Eu também tentei o seguinte:

> 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  

Então eu usei conda para remover backports.shutil_get_terminal_size:
> conda uninstall backports.shutil_get_terminal_size

Quando agora tento importar backports.shutil_get_terminal_size em python, ele não o encontra. Então eu removi o ipython e o jupyter e reinstalei o ipython através do conda, que também instalou o jupyter e o backports.shutil_get_terminal_size. No entanto, _ainda_ não funciona! Estou perplexo.

Em seguida, removi as instalações através do conda e as reinstalei através do pip. _ainda_ não funciona....

Como reinicio o python?

Feche-o ( exit() ) e reinicie-o.

Verificado para backports:

> 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  

Executei python depois de reiniciá-lo:

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

Tentei atualizar:

> 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

Eu não entendo. O que mais eu posso fazer? Posso editar ´terminal.py´ para apontá-lo na direção certa?

Se você desinstalar todos os pacotes de backports, reinicie o Python e verifique:

import backports
backports.__path__

O que você ganha?

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

Existe alguma coisa instalada no diretório anterior (aquele em /home/raid2 )?

Esse é o diretório onde os pacotes python e ipython de todo o sistema são armazenados. No entanto, não os estou usando, pois estou usando a instalação local do anaconda. E não deve interferir. Verdade seja dita, sob o diretório /home/raid2... não há pacote backports.shutil_get_terminal_size.

Quando executo a instalação em todo o sistema (que possui uma versão mais antiga do ipython), ela funciona bem. Mas quando eu inicio meu ambiente com a nova instalação do anaconda com
export PATH="/nobackup/archimedes1/Glad/anaconda2_serverwide/bin:$PATH" , ele não consegue encontrar a função de tamanho da janela.

Eu fiz um script para tentar ajudar a depurar isso. Você pode executá-lo e postar a saída?

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

Certo!!!1

Isto é o que eu fiz para de alguma forma fazê-lo funcionar.
ipython e jupyter e backports.shutil_get_window_size desinstalados com conda e pip:

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

Assegurei-me de que não sobrou nada de nenhum pacote. Então eu reinstalei apenas o ipython com conda:

> 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

E agora funciona!!! Obrigado pelo seu tempo generoso @takluyver !

Aqui está a saída do seu script:

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

Ok, que bom que funcionou. A saída do script agora mostra as coisas como deveriam ser; espero que o script possa ser útil se alguém tiver esse problema no futuro.

Eu também tenho o mesmo problema. Tentei de tudo desde o início, desinstalando e instalando tudo. Também executou o script que você compartilhou acima -
Aqui está a saída:

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

Você pode me ajudar com isto? Eu não quero usar conda embora.

Obrigado!

Existe alguma coisa em /Users/shiva/Library/Python/2.7/lib/python/site-packages/backports ? Você pode tentar removê-lo / renomeá-lo?

Existe algo em /Users/shiva/Library/Python/2.7/lib/python/site-packages/backports? Você pode tentar removê-lo / renomeá-lo?

Tentei, continua o mesmo problema.

Fiz uma alteração no script de depuração , você pode tentar obtê-lo novamente e executá-lo novamente.

Aqui está a saída -

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

Você reiniciou o Python desde a remoção/renomeação desse diretório? Ainda está encontrando de alguma forma.

Estou executando o script usando o comando "python debug_namespace_pkg.py". E reiniciei o terminal antes de fazer isso.

E /Users/shiva/Library/Python/2.7/lib/python/site-packages/backports definitivamente não existe? Como antes, não entendo como está obtendo uma referência a uma pasta que aparentemente não está lá.

Sim, eu o renomeei no local que você especificou. Tem certeza de que não quer dizer /usr/local/lib/python2.7/site-packages/backports ?

Não, esse é o que ele precisa encontrar. Aquele abaixo de /Users/shiva parece estar atrapalhando de alguma forma. Esta linha mostra que ainda está encontrando de alguma forma:

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

Mas não entendo como isso é possível depois que você o removeu. :confuso:

Aha, tem uma coisa que eu nunca soube: .pkg arquivos. Você pode procurar um arquivo chamado backports.pkg ?

( backports.pkg provavelmente estará em um desses diretórios site-packages , embora possa estar em outro lugar em seu sistema)

Não consigo encontrar backports.pkg em nenhum lugar. Eu usei find ./* -name backports.pkg na pasta raiz.

Finalmente, funcionou.

Renomear essa pasta não funciona, removê-la sim. Muito obrigado por sua ajuda :)

Estranho, não entendo por que removê-lo seria diferente de apenas renomeá-lo. Ainda bem que deu certo, de qualquer forma.

Estou tendo problemas semelhantes e a desinstalação/instalação do pip não parece estar ajudando. Esta é a saída do seu script de depuração (devido a 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__)

Eu tenho:

$ 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

Eu finalmente consegui trabalhar pelo seguinte método de hack. 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

A mesma coisa novamente - de alguma forma, está encontrando um diretório que parece não estar lá. Você pode procurar um arquivo backport.pkg também? Vou adicionar isso ao script.

Saída do último script:

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

Isso é irritante; Não consigo descobrir como está encontrando o primeiro caminho ( /home/ihincks/... ).

Existe algo mais em /home/ihincks/.local/lib/python2.7/site-packages/ que possa explicar por que está encontrando backports lá?

Não sei exatamente o que procurar. Aqui está tudo em /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

O que é backports.shutil_get_terminal_size-1.0.0 e o que está dentro dele?

É um pacote python, que parece expor a função única get_terminal_size em backports.shutil_get_terminal_size . Esta pasta tem estrutura:

./
├── 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

O conteúdo de 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

Ah, tudo bem, acho que você descompactou o sdist manualmente em algum momento. A exclusão desse diretório inteiro ( backports.shutil_get_terminal_size-1.0.0 ) faz alguma diferença? Eu estou supondo que é apenas um arenque vermelho.

Ok, revertido /usr/local/lib/python2.7/dist-packages/IPython/utils/terminal.py de volta ao formato original. Correu ipython e deu um erro ImportError: No module named shutil_get_terminal_size .

Em seguida, mudou a pasta /home/ihincks/.local/lib/python2.7/site-packages/backports.shutil_get_terminal_size-1.0.0 para /home/ihincks temporariamente. Executei ipython novamente, com o mesmo erro.

OK, então essa pasta é apenas um arenque vermelho, e ainda estou no escuro sobre como está encontrando /home/ihincks/.local/lib/python2.7/site-packages/backports :-(

Hmm, gostaria de poder ajudar mais, eu só entendo metade do que está acontecendo; coisas de instalação de caminho/biblioteca do python geralmente me confundem.

Não tem problema, isso parece ser uma magia negra bem escondida.

Se alguém puder replicar isso em um sistema em que não se importe em me dar acesso ssh para bisbilhotar e tentar entender o que está acontecendo, entre em contato.

Eu também tenho o mesmo problema ....... Instalei o jupyter recentemente e quando tentei abrir um arquivo de notebook ipython ele diz que o kernel está morto com um erro de importação para backports.shutil_get_terminal_size. Finalmente, resolvi esse problema após atualizar o pip, reinstalando jupyter e backports.shutil-get-terminal-size várias vezes ........ e finalmente executando este comando: python2 -m ipykernel install --user. Isso deu vida ao meu kernel. Ref: http://askubuntu.com/questions/847263/install-jupyter-for-python-2-7-in-ubuntu-14-04

Então, encontrei esse problema e, ao inspecionar /usr/lib/python2.7/site-packages/backports.shutil_get_terminal_size-1.0.0.dist-info, encontrei apenas:

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

e nada para importar. Isso após pip --upgrade, pip desinstalar/instalar ipython e assim por diante. Portanto, parece que o pip não estava realmente instalando o pacote, apenas a roda. Baixei o arquivo .tar.gz, copiei-o no diretório wheel que corrigiu o problema que tive com o ipython. Não é o jeito certo de consertar isso. Estou rodando no RHEL7, então isso provavelmente tem algo a ver com isso.

O diretório que termina em .dist-info é um arquivo de metadados sobre o pacote instalado, não deve conter nada importável. O código deve estar em um diretório adjacente: /usr/lib/python2.7/site-packages/backports

Talvez o código possa ajudá-lo: pip install --user backports.shutil_get_terminal_size , basta instalá-lo para o usuário atual se o seu ipython estiver ok para root ou outros usuários.

Ola pessoal,

se vocês tiverem tente consertar isso com

pip install backports.shutil_get_terminal_size

mas não funcionou.

A melhor maneira é examinar seu caminho sys

import sys
print sys.path

verifique cada caminho se houver pacote backports antes do caminho correto do modelo ipython e exclua-o diretamente.

Eu tenho uma versão muito estranha deste bug:

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$

Eu realmente não posso dizer por que o python não está encontrando o sistema operacional nativo empacotado backports / backports.shutil_get_terminal_size , ou por que está encontrando uma versão fantasma de backports em /usr/local /lib. Meu 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

Vou reabrir e marcar como 5.4, acho que devemos vender shutil_get_terminal_size por segurança.

@Carreau fwiw parece que pode haver um bug pip ou python aqui, ou eu fiz algo tolo, ou talvez ambos. Vai passar por algumas pessoas pip mais experientes.

Outro caso em que está encontrando um pacote backports que não está realmente lá. Algumas pessoas relataram algo assim, mas também não consigo descobrir de onde vem. Você poderia tentar executar este script ? E procure por arquivos .pkg e .pth , que podem estar afetando.

@Carreau no meu sistema, o problema acabou sendo a presença do módulo 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

Obrigado a @erikrose por ajudar a depurar isso.

Fechando como fornecedor #10587, essas coisas e o IPython 5.4 devem ser lançados em breve

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