Ipython: ImportError : aucun module nommé shutdown_get_terminal_size

CrĂ©Ă© le 28 juil. 2016  Â·  81Commentaires  Â·  Source: ipython/ipython

Mise Ă  jour de @carreau :
RĂ©ouverture, marquage 5.4, nous devrions vendre shutdown_get_terminal_size.


AprÚs avoir installé ipython sudo apt-get install ipython-notebook , ipython il apparaßt une erreur, comme suit :

jiangyuping@Lenovo :~$ ipython
Traceback (dernier appel le plus récent) :
Fichier "/usr/local/bin/ipython", ligne 4, dans
depuis l'importation IPython start_ipython
Fichier "/usr/local/lib/python2.7/dist-packages/IPython/ init .py", ligne 48, dans
Ă  partir de l'application d'importation .core.application
Fichier "/usr/local/lib/python2.7/dist-packages/IPython/core/application.py", ligne 25, dans
Ă  partir de la version d'importation IPython.core, crashhandler
Fichier "/usr/local/lib/python2.7/dist-packages/IPython/core/crashhandler.py", ligne 28, dans
depuis IPython.core importer ultratb
Fichier "/usr/local/lib/python2.7/dist-packages/IPython/core/ultratb.py", ligne 128, dans
depuis IPython.utils.terminal import get_terminal_size
Fichier "/usr/local/lib/python2.7/dist-packages/IPython/utils/terminal.py", ligne 22, dans
depuis backports.shutil_get_terminal_size importer get_terminal_size en tant que _get_terminal_size
ImportError : aucun module nommé shutdown_get_terminal_size

Commentaire le plus utile

@oschow cela _devrait_ fonctionner en général :

# 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

Tous les 81 commentaires

Vous avez une copie plus récente d'IPython installée en dehors d'apt, et elle nécessite le package backports.shutil_get_terminal_size . Utilisez pip pour l'installer.

@takluyver AprĂšs pip install ipython , il apparaĂźt

jiangyuping@Lenovo :~/ipython$ pip install ipython
Exigence déjà satisfaite (utilisez --upgrade pour mettre à niveau) : ipython dans /usr/local/lib/python2.7/dist-packages

puis, ipython , il apparaĂźt

jiangyuping@Lenovo :~/ipython$ ipython
Traceback (dernier appel le plus récent) :
Fichier "/usr/local/bin/ipython", ligne 4, dans
depuis l'importation IPython start_ipython
Fichier "/home/jiangyuping/ipython/IPython/ init .py", ligne 48, dans
Ă  partir de l'application d'importation .core.application
Fichier "/home/jiangyuping/ipython/IPython/core/application.py", ligne 25, dans
Ă  partir de la version d'importation IPython.core, crashhandler
Fichier "/home/jiangyuping/ipython/IPython/core/crashhandler.py", ligne 28, dans
depuis IPython.core importer ultratb
Fichier "/home/jiangyuping/ipython/IPython/core/ultratb.py", ligne 128, dans
depuis IPython.utils.terminal import get_terminal_size
Fichier "/home/jiangyuping/ipython/IPython/utils/terminal.py", ligne 22, dans
depuis backports.shutil_get_terminal_size importer get_terminal_size en tant que _get_terminal_size
ImportError : aucun module nommé shutdown_get_terminal_size

Je voulais dire:

pip install backports.shutil_get_terminal_size

Cependant, si cela n'apporte pas cela en tant que dépendance d'IPython, cela signifie probablement que vous avez une ancienne version de pip. Pour le mettre à niveau :

pip install --upgrade setuptools pip

Merci, installé avec succÚs.

J'ai essayé beaucoup de choses. Le dernier qui a été résolu mettait à jour setuptools . J'ai également mis à jour pip et réinstallé ipython, etc.

Merci! Cela n'a pas fonctionné pour moi. Mais ça m'a donné une idée... J'ai fait une installation pip --upgraded avec un fichier whl du backports.shutil_get_terminal_size

Avant cela, le simple fait d'installer un pip entraßnait une "exigence déjà satisfaite", etc.
Maintenant, je peux exécuter GraphLab Create de Turi :)

@jnault J'ai le mĂȘme problĂšme car j'ai essayĂ© d'installer GraphLab Create de Turi. Quelles commandes exactes as-tu utilisĂ© ?

Je ne me souviens pas exactement, mais je me souviens que c'est assez facile. Mes pas:
1) Google recherche ce fichier avec l'extension .whl et
2) Recherche Google Comment installer un fichier WHL
hum. Ok ça a l'air snarky ou quelque chose. Je suis sincÚre et j'essaie d'aider. Mais c'est littéralement ce que j'ai fait. Je suis presque sûr que le fichier provient de pypi. Je suppose qu'un fichier WHL pourrait éventuellement installer quelque chose, alors je me suis assuré qu'il venait d'une source réputée.
Je suppose que la commande Ă©tait : pip install --upgrade backports.shutil_get_terminal_size.whl

@oschow cela _devrait_ fonctionner en général :

# 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 a de meilleurs conseils.
Minrk, vous avez écrit "si pip pense que vous l'avez déjà mais ne semble pas". Donc, il est possible que le fichier ait été programmé lors de l'installation initiale de python mais qu'il ait ensuite été manqué? Ainsi, il est répertorié comme présent, mais ne l'est-il vraiment pas ?

J'ai eu le mĂȘme problĂšme en essayant d'installer Graphlab Create. La solution de minrk l'a Ă©galement corrigĂ© pour moi.

@minrk avait la solution de travail pour moi, juste une désinstallation suivie d'une installation a fonctionné pour moi.
Voici ce que j'ai fait.

désinstallez si pip pense que vous l'avez déjà mais ne semble pas:

pip désinstaller backports.shutil_get_terminal_size

installez-le à nouveau sans pépin définitivement à jour :

pip install --upgrade backports.shutil_get_terminal_size

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

@bevice Et alors ?

Jusqu'à présent, je n'ai pas été en mesure de résoudre avec l'une des suggestions sur ce fil ou tout autre fil.

Si je cours

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

Ça marche. Mais exĂ©cuter ipython ou jupyter notebook me donne la mĂȘme erreur, qu'il ne trouve pas shutdown_get_terminal_size

Je pense que cela signifie que vous avez un autre package backports.<something> installé quelque part qui a gùché la machinerie des packages d'espace de noms. Vous devrez probablement le trouver et le désinstaller. Essayez pip list pour voir tous les packages installés.

@takluyver Merci pour la réponse rapide.

Voici ce que j'ai trouvé :

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

Que puis-je faire maintenant?

Désinstallez backports.ssl-match-hostname et backports.shutil-get-terminal-size et réinstallez-les.

Dois-je "redémarrer" anaconda ou quelque chose pour que les changements prennent effet ? La désinstallation des packages que vous avez mentionnés et leur réinstallation n'ont pas fonctionné.

Non, il n'y a pas de redĂ©marrage. Juste pour ĂȘtre sĂ»r, cependant, aprĂšs les avoir dĂ©sinstallĂ©s, essayez de les dĂ©sinstaller Ă  nouveau. RĂ©pĂ©tez jusqu'Ă  ce qu'il ne trouve rien Ă  dĂ©sinstaller. Parfois, il y a des copies Ă  diffĂ©rents endroits.

Si cela ne fonctionne toujours pas, essayez de désinstaller backports.ssl-match-hostname et de le laisser désinstallé (au moins jusqu'à ce que vous trouviez ce qui en a besoin...)

Bien. J'ai essayé tout ce que vous avez dit, mais rien n'y fait. Quelles sont mes options ? Le problÚme a commencé lorsque j'ai installé pymc3. L'autre chose est que j'ai changé certains scripts afin d'ajouter des modules à la boßte à outils nipype. Dois-je tout supprimer et réinstaller ? Ce serait le dernier recours, j'espÚre.

Qu'est-ce que vous obtenez en essayant ceci dans le mĂȘme Python avec lequel vous essayez d'exĂ©cuter IPython :

import backports
print(backports)

Je l'ai exécuté avec les backports installés:

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

Ensuite, désinstallez-les et exécutez-le à nouveau :

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

Donc, apparemment, j'ai des packages intĂ©grĂ©s quelque part qui gĂąchent les choses. Mais je ne sais pas comment les trouver. MĂȘme si je les trouve, je ne pourrai peut-ĂȘtre rien changer car je n'ai pas les autorisations root.

Y a-t-il autre chose dans le dossier qu'il vous a montré là ( /nobackup/archimedes1/Glad/anaconda2_serverwide/lib/python2.7/site-packages/backports/ ) ?

Non, maintenant qu'il est désinstallé, le dossier est complÚtement absent. Tout comme le dossier
../site-packages/backports.shutil-get-terminal-size-1.0.0 qui Ă©tait lĂ  lors de son installation.

Pouvez-vous vérifier backports.__path__ en Python ?

Sans backports installés :
['/nobackup/archimedes1/Glad/anaconda2_serverwide/lib/python2.7/site-packages/backports']

C'est le mĂȘme rĂ©pertoire qu'avant ? Manque-t-il dĂ©finitivement ? Je ne comprends pas comment il pourrait trouver ce chemin s'il n'y a rien lĂ -bas.

J'ai recherché tous les backports possibles dans le répertoire anaconda2_serverwide. Je ne suis pas sûr de ce que tout cela signifie.
Voici ce que j'ai trouvé :

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

Aviez-vous redémarré Python aprÚs avoir désinstallé backports ? Sinon, pouvez-vous redémarrer Python et vérifier à nouveau backports.__path__ ? Je ne connais aucun moyen d'identifier ce chemin s'il n'y a pas de fichier là-bas.

Comment redémarrer Python ?

J'ai aussi essayé ce qui suit :

> 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  

J'ai donc utilisé conda pour supprimer backports.shutil_get_terminal_size :
> conda uninstall backports.shutil_get_terminal_size

Lorsque j'essaie maintenant d'importer backports.shutil_get_terminal_size en python, il ne le trouve pas. J'ai donc supprimé ipython et jupyter et réinstallé ipython via conda qui a également installé jupyter et backports.shutil_get_terminal_size. Cependant, cela ne fonctionne _toujours_ pas ! Je suis perplexe.

J'ai ensuite supprimĂ© les installations via conda et les ai rĂ©installĂ©es via pip. Ça ne marche _toujours_ pas....

Comment redémarrer Python ?

Fermez-le ( exit() ) puis redémarrez-le.

Vérifié pour les rétroportages :

> 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  

A couru python aprÚs l'avoir redémarré :

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

J'ai essayé de le mettre à jour :

> 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

Je ne comprends pas. Que puis-je faire d'autre? Puis-je modifier 'terminal.py' pour le pointer dans la bonne direction ?

Si vous désinstallez tous les packages de backports, redémarrez Python et vérifiez :

import backports
backports.__path__

Qu'est ce que tu obtiens?

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

Y a-t-il quelque chose d'installé dans l'ancien répertoire (celui sous /home/raid2 ) ?

C'est le rĂ©pertoire dans lequel les packages python et ipython Ă  l'Ă©chelle du systĂšme sont stockĂ©s. Je ne les utilise pas, cependant, car j'utilise l'installation anaconda locale. Et cela ne devrait pas interfĂ©rer. À vrai dire, sous le rĂ©pertoire /home/raid2... il n'y a pas de paquet backports.shutil_get_terminal_size.

Lorsque j'exécute l'installation à l'échelle du systÚme (qui a une ancienne version d'ipython), elle fonctionne trÚs bien. Mais quand je démarre mon environnement avec la nouvelle installation anaconda avec
export PATH="/nobackup/archimedes1/Glad/anaconda2_serverwide/bin:$PATH" , il ne parvient pas Ă  trouver la fonction de taille de fenĂȘtre.

J'ai fait un script pour essayer d'aider à déboguer cela. Pouvez-vous l'exécuter et publier le résultat ?

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

D'accord !!!1

C'est ce que j'ai fait pour que ça marche en quelque sorte.
Ipython et jupyter désinstallés et backports.shutil_get_window_size avec conda et pip :

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

Je me suis assuré qu'il ne restait plus rien d'aucun colis. Ensuite, j'ai réinstallé uniquement ipython avec 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

Et maintenant ça marche !!! Merci pour votre temps généreux @takluyver !

Voici le résultat de votre 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, content que ça fonctionne. La sortie du script montre maintenant les choses telles qu'elles sont censĂ©es ĂȘtre ; j'espĂšre que le script pourrait ĂȘtre utile si quelqu'un a ce problĂšme Ă  l'avenir.

J'ai aussi le mĂȘme problĂšme. J'ai tout essayĂ© depuis le dĂ©but, en dĂ©sinstallant et en installant tout. A Ă©galement exĂ©cutĂ© le script que vous avez partagĂ© ci-dessus -
Voici la sortie :

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

Peux-tu m'aider avec ceci? Je ne veux pas utiliser conda cependant.

Merci!

Y a-t-il quelque chose dans /Users/shiva/Library/Python/2.7/lib/python/site-packages/backports ? Peux-tu essayer de le supprimer/renommer ?

Y a-t-il quelque chose dans /Users/shiva/Library/Python/2.7/lib/python/site-packages/backports ? Peux-tu essayer de le supprimer/renommer ?

J'ai essayĂ©, toujours le mĂȘme problĂšme.

J'ai modifié le script de débogage , pouvez-vous essayer de le récupérer et de le relancer.

Voici la sortie -

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

Avez-vous redémarré Python depuis la suppression/renommage de ce répertoire ? Il est toujours en train de le trouver d'une maniÚre ou d'une autre.

J'exécute le script en utilisant la commande "python debug_namespace_pkg.py". Et j'ai redémarré le terminal avant de le faire.

Et /Users/shiva/Library/Python/2.7/lib/python/site-packages/backports n'existe définitivement pas ? Comme auparavant, je ne comprends pas comment il obtient une référence à un dossier qui n'est apparemment pas là.

Oui, je l'ai renommĂ© Ă  l'emplacement que vous avez spĂ©cifiĂ©. Êtes-vous sĂ»r de ne pas vouloir dire /usr/local/lib/python2.7/site-packages/backports ?

Non, c'est celui qu'il doit trouver. Celui de moins /Users/shiva semble gĂȘner d'une maniĂšre ou d'une autre. Cette ligne montre qu'il le trouve toujours d'une maniĂšre ou d'une autre :

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

Mais je ne comprends pas comment c'est possible aprÚs l'avoir supprimé. :embrouillé:

Ah, il y a quelque chose que je ne savais pas : les fichiers .pkg . Pouvez-vous rechercher un fichier nommé backports.pkg ?

( backports.pkg sera probablement dans l'un de ces rĂ©pertoires site-packages , bien qu'il puisse ĂȘtre ailleurs sur votre systĂšme)

Je ne trouve nulle part backports.pkg. J'ai utilisé find ./* -name backports.pkg dans le dossier racine.

Enfin, ça a marché.

Renommer ce dossier ne fonctionne pas, le supprimer fonctionne. Merci beaucoup pour votre aide :)

Bizarre, je ne comprends pas pourquoi le supprimer serait différent de simplement le renommer. Content que ça fonctionne, en tout cas.

J'ai des problÚmes similaires et la désinstallation/installation de pip ne semble pas aider. Ceci est la sortie de votre script de débogage (en raison de 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__)

J'ai:

$ 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

Je l'ai finalement fait fonctionner par la méthode de piratage suivante. Ouvrez (sous Linux) /usr/local/lib/python2.7/dist-packages/IPython/utils/terminal.py et changez la ligne

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

MĂȘme chose - d'une maniĂšre ou d'une autre, il trouve un rĂ©pertoire qui ne semble pas ĂȘtre lĂ . Pouvez-vous Ă©galement rechercher un fichier backport.pkg ? Je vais l'ajouter au script.

Sortie du dernier 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__)

C'est exaspérant ; Je n'arrive pas à comprendre comment il trouve le premier chemin ( /home/ihincks/... ).

Y a-t-il autre chose dans /home/ihincks/.local/lib/python2.7/site-packages/ qui pourrait expliquer pourquoi il y trouve backports ?

Je ne sais pas exactement quoi chercher. Voici tout en /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

Qu'est-ce que backports.shutil_get_terminal_size-1.0.0 et qu'y a-t-il dedans ?

C'est un package python, qui semble exposer la fonction unique get_terminal_size dans backports.shutil_get_terminal_size . Ce dossier a la structure :

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

Le contenu de PKG-INFO est :

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, OK, je suppose que vous avez décompressé le sdist manuellement à un moment donné. La suppression de tout ce répertoire ( backports.shutil_get_terminal_size-1.0.0 ) fait-elle une différence ? Je suppose que c'est juste un faux-fuyant.

D'accord, /usr/local/lib/python2.7/dist-packages/IPython/utils/terminal.py est revenu Ă  sa forme d'origine. A couru ipython et a obtenu l'erreur ImportError: No module named shutil_get_terminal_size .

Puis dĂ©placĂ© temporairement le dossier /home/ihincks/.local/lib/python2.7/site-packages/backports.shutil_get_terminal_size-1.0.0 vers /home/ihincks . A couru Ă  nouveau ipython , avec la mĂȘme erreur.

OK, donc ce dossier n'est qu'un faux-fuyant, et je ne sais toujours pas comment il trouve /home/ihincks/.local/lib/python2.7/site-packages/backports :-(

Hmm, j'aimerais pouvoir ĂȘtre plus utile, je ne comprends qu'Ă  moitiĂ© ce qui se passe ; les trucs d'installation de python path/library me confondent gĂ©nĂ©ralement.

Pas de problĂšme, cela semble ĂȘtre une magie noire assez bien cachĂ©e.

Si quelqu'un peut reproduire cela sur un systĂšme oĂč cela ne me dĂ©range pas de me donner un accĂšs ssh pour fouiller et essayer de comprendre ce qui se passe, veuillez me contacter.

Moi aussi j'ai eu le mĂȘme problĂšme ....... J'ai installĂ© jupyter rĂ©cemment et quand j'ai essayĂ© d'ouvrir un fichier de bloc-notes ipython, il dit que le noyau est mort avec une erreur d'importation pour backports.shutil_get_terminal_size. Enfin, j'ai rĂ©solu ce problĂšme aprĂšs avoir mis Ă  jour pip, rĂ©installĂ© plusieurs fois jupyter et backports.shutil-get-terminal-size........et enfin exĂ©cutĂ© cette commande : python2 -m ipykernel install --user. Cela a donnĂ© vie Ă  mon noyau. RĂ©f : http://askubuntu.com/questions/847263/install-jupyter-for-python-2-7-in-ubuntu-14-04

J'ai donc rencontré ce problÚme, et en inspectant /usr/lib/python2.7/site-packages/backports.shutil_get_terminal_size-1.0.0.dist-info, j'ai trouvé uniquement :

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

et rien à importer. Ceci aprÚs pip --upgrade, pip uninstall/install ipython et ainsi de suite. Il semble donc que pip n'installait pas réellement le package, juste la roue. J'ai téléchargé le fichier .tar.gz, je l'ai copié dans le répertoire de la roue, ce qui a résolu le problÚme que j'avais avec ipython. Pas la bonne façon de le réparer. Je cours sous RHEL7, donc cela a probablement quelque chose à voir avec cela.

Le répertoire qui se termine par .dist-info est un fichier de métadonnées sur le package installé, il n'est pas censé contenir quoi que ce soit d'importable. Le code doit se trouver dans un répertoire adjacent : /usr/lib/python2.7/site-packages/backports

Peut-ĂȘtre que le code peut vous aider : pip install --user backports.shutil_get_terminal_size , installez-le simplement pour l'utilisateur actuel si votre ipython est ok pour root ou d'autres utilisateurs.

Bonjour gars,

si vous avez essayé de résoudre ce problÚme avec

pip install backports.shutil_get_terminal_size

mais ça n'a pas marché.

La meilleure façon est d'examiner votre chemin sys

import sys
print sys.path

vérifiez chaque chemin s'il y a un paquet backports avant le chemin correct du modÚle ipython et supprimez-le directement.

J'ai une version trĂšs Ă©trange de ce 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$

Je ne peux vraiment pas dire pourquoi python ne trouve pas le systÚme d'exploitation natif empaqueté backports / backports.shutil_get_terminal_size , ou pourquoi il trouve une version fantomatique de backports dans /usr/local /lib. Mes sys.path sont :

['', '/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

Je vais rouvrir et marquer comme 5.4 Je pense que nous devrions vendre shutil_get_terminal_size pour ĂȘtre en sĂ©curitĂ©.

@Carreau fwiw on dirait qu'il pourrait y avoir un bogue pip ou python ici, ou j'ai fait quelque chose de stupide, ou peut-ĂȘtre les deux. Le passera devant des personnes plus informĂ©es.

Un autre cas oĂč il trouve un package backports qui n'est pas vraiment lĂ . Quelques personnes ont signalĂ© quelque chose comme ça, mais je ne peux pas non plus comprendre d'oĂč cela vient. Pourriez-vous essayer d'exĂ©cuter ce script ? Et recherchez les fichiers .pkg et .pth , qui pourraient l'affecter.

@Carreau sur mon systĂšme, le problĂšme s'est avĂ©rĂ© ĂȘtre la prĂ©sence du module 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

Merci à @erikrose pour son aide pour le débogage.

Fermant en tant que fournisseur # 10587, ces choses et IPython 5.4 devraient ĂȘtre bientĂŽt publiĂ©es

Cette page vous a été utile?
0 / 5 - 0 notes