Ipython: Aucun module nommé shutdown_get_terminal_size

Créé le 23 juin 2016  ·  71Commentaires  ·  Source: ipython/ipython

Bonne journée,
Je contribue à un petit projet pour créer un noyau au-dessus d'ipykernel. Cela fait un moment que je n'y ai pas touché, et aujourd'hui, lorsque j'ai déployé un nouvel environnement de développement en installant Jupyter, j'ai obtenu la trace de pile suivante lors de l'appel à 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

Évidemment, quelque chose a changé depuis ma dernière utilisation d'IPython et d'ipykernel. Une idée du problème? Je travaille sur une boîte OSX avec Python 2.7.10.

Meilleur, Aurélien

Commentaire le plus utile

On dirait que vous avez installé IPython sans obtenir ses dépendances d'une manière ou d'une autre. Étant donné que je vois des œufs, cela signifie probablement que vous avez une version trop ancienne de setuptools et que vous utilisez peut-être easy_install . Tout d'abord, assurez-vous d'avoir des pip/setuptools relativement récents :

pip install --upgrade setuptools pip

Ensuite, essayez de réinstaller IPython avec pip (n'utilisez jamais easy_install, sauf si vous savez qu'il y a une bonne raison pour laquelle pip ne fonctionnera pas. Ces cas sont rares) :

pip uninstall ipython
pip install ipython

Tous les 71 commentaires

On dirait que vous avez installé IPython sans obtenir ses dépendances d'une manière ou d'une autre. Étant donné que je vois des œufs, cela signifie probablement que vous avez une version trop ancienne de setuptools et que vous utilisez peut-être easy_install . Tout d'abord, assurez-vous d'avoir des pip/setuptools relativement récents :

pip install --upgrade setuptools pip

Ensuite, essayez de réinstaller IPython avec pip (n'utilisez jamais easy_install, sauf si vous savez qu'il y a une bonne raison pour laquelle pip ne fonctionnera pas. Ces cas sont rares) :

pip uninstall ipython
pip install ipython

Plus précisément dans ce cas, nous avons ajouté une dépendance sur le package backports.shutil_get_terminal_size .

Merci pour votre retour rapide ! Cependant, le mystère s'épaissit. Il semble que l'installation de Jupyter via pip sur la ligne de commande donne un résultat différent de celui d'avoir Jupyter défini comme une exigence lors de l'utilisation de setuptools . Alors que la première approche réussit, la deuxième approche échoue pour moi. Voici les étapes pour reproduire ce problème :

Tout d'abord, nous commençons avec un interpréteur Python 2.7.11 barebone, avec seulement trois packages installés :

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

Si j'installe Jupyter à l'aide de pip, tout fonctionne correctement et j'obtiens les packages suivants :

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

Cependant, si j'essaie d'installer Jupyter comme exigence pour un projet en ayant le script setup.py (notez que je redémarre à partir d'un nouvel interpréteur 2.7.11 avec les trois modules de base pip , setuptools et virtualenv ):

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

... alors ça échoue:

$ 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

Fait intéressant, lors de la liste des packages qui _did_ sont installés, nous pouvons voir que ipython et jupyter-console sont maintenant les versions 5.0.0b4 et 5.0.0b1, respectivement au lieu de 4.2.0 et 4.1.1 comme ci-dessus lors de l'installation de Jupyter avec pip . Voici les forfaits :

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

Il me manque peut-être quelque chose ici, mais je ne sais pas quoi. Avez-vous une idée de la raison pour laquelle le fait d'avoir jupyter tant que dépendance dans un script setuptools -powered setup.py échoue ici ?

Meilleur,
Aurélien

Cela suggère que setuptools obtient peut-être une version différente de celle de pip lors de l'importation (un bogue connu causé par les anciens setuptools). Qu'est-ce que vous obtenez de:

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

Et aussi:

python -m site

C'est aussi quelque chose qui n'est peut-être pas familier que si vous utilisez setuptools dans setup.py, vous ne devriez python setup.py install , seulement pip install . .

Voici les sorties :

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

et

$ 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

C'est aussi quelque chose qui n'est peut-être pas familier que si vous utilisez setuptools dans setup.py, vous ne devriez jamais faire python setup.py install , seulement pip install . .

C'est très intéressant, et c'est peut-être le signe que j'ai besoin de mettre à jour mes connaissances sur setuptools . Quoi qu'il en soit, cela a résolu mon problème! En tapant pip install . dans le dossier contenant mon script setup.py ci-dessus, j'ai réussi à installer Jupyter et ses dépendances. Merci!

En guise de question secondaire, pourquoi cela n'a-t-il pas fonctionné avec python setup.py install ? Je n'ai trouvé aucune référence en ligne expliquant pourquoi cela pourrait être un problème.

Meilleur, Aurélien

python setup.py install fait la même chose qu'easy_install. easy_install fait beaucoup de choses désagréables, qui sont la raison pour laquelle pip a été créé. Pour des raisons de compatibilité descendante, python setup.py install avec setuptools importés fera toujours les choses indésirables que easy_install fait, et ne devrait donc jamais être appelé.

Je n'obtiens cette erreur que si j'installe ipython dans un virtualvenv partagé sur NFS. Avez-vous des indices sur la raison pour laquelle l'installation dans un venv sur NFS peut causer ce problème ?

Je ne sais pas pourquoi NFS ferait une différence, mais vérifiez la version de pip dans virtualenv, et si ce n'est pas la dernière, essayez de la mettre à jour :

pip install --upgrade setuptools pip

@takluyver Le même pip qui installe correctement ipython dans le système de fichiers "normal", ne l'installe pas correctement sur NFS. Et oui, c'est la dernière version de pip.

Bizarre. Aucune idée de pourquoi NFS affecterait cela.

Je rencontre également ce problème avec Python 2.7 en utilisant le dernier pip (8.1.2) et le dernier setuptools (25.1.6). N'est-il pas possible qu'il se passe autre chose ?

L'installation préalable de backports.shutil_get_terminal_size avec pip était une solution de contournement efficace pour le problème.

Comme mentionné ailleurs, mettez PR ( https://github.com/paulgb/runipy/pull/125 ) ensemble pour afficher l'erreur backports.shutil_get_terminal_size et l'erreur entrypoints . Le premier commit montre la première erreur et le deuxième commit montre la deuxième erreur. Dans les deux cas, les 3 premiers IC construits dans la matrice sont intéressants. Tous les 3 utilisent setuptools pour tout installer.

Cela ressemble à un problème dans setuptools. L'installation avec pip (comme cela devrait toujours être fait) résoudra le

Je ne suis pas sûr à 100% de ce que setuptools ne parvient pas à faire, cependant.

Je viens d'avoir le même genre de problème pour installer IPython (pas Jupyter) dans un nouveau virtualenv 2.7.3. IPython a semblé s'installer mais il manquait pathlib2 puis backports.shutil-get-terminal-size . Faire un pip install sur chacun a corrigé les dépendances et IPython fonctionne maintenant.

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

Pouvez-vous faire un pip --version ? Je suppose que vous avez une version trop ancienne de pip.

Oui vous avez raison. J'étais sur le pip 1.4.1.

J'ai répété l'exercice après avoir mis à niveau mon virtualenv vers pip 8.1.2 et IPython 5.0.0 installé sans problème.

$ 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

J'ai aussi ce problème sur 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

J'ai essayé de faire sudo pip install --upgrade --force-reinstall ipython (ainsi que de réinstaller pip et setuptools) sans succès.

Après quelques recherches, je pense que le module backports.shutil_get_terminal_size lui-même est en cause :

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⟫

Fait intéressant, le module backports semble installer deux versions (légèrement différentes ?!) de lui-même :

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

et patcher IPython/utils/terminal.py pour utiliser Shutil_backports.get_terminal_size fonctionne. Allez comprendre.

Bonjour,

J'obtenais la même erreur dans virtualenv. J'avais utilisé pip pour installer jupyter.

j'obtenais
ImportError : aucun module nommé Shutil_get_terminal_size

_"pip freeze" a montré backports.shutil-get-terminal-size==1.0.0_

J'ai donc essayé la mise à niveau. Cela montrait:

_pip install --upgrade backports.shutil-get-terminal-size_
Exigence déjà à jour : backports.shutil-get-terminal-size dans /Library/Python/2.7/site-packages

Il accédait donc en quelque sorte à mes bibliothèques globales et non à celle de mon venv.

Ensuite, j'ai désinstallé backports.shutil-get-terminal-size du python global et l'ai installé dans mon venev. Maintenant ça marche bien.

Je peux reproduire cela 100% du temps avec cette installation

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

Je peux reproduire cela 0% du temps avec cette installation

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

Notez qu'avec --user l'outil python en ligne de commande est installé à ~/Library/Python/2.7/bin/ipython au lieu de /usr/local/bin

@AndrewHoos et pour moi, les deux commandes obtiennent les dépendances correctement. Qu'est-ce que vous obtenez de pip --version ? Il doit être au moins égal à 8. Si ce n'est pas le cas, assurez-vous que vos outils de configuration et votre pip sont à jour :

pip install --upgrade setuptools pip

Je suis confronté à ce problème avec le notebook 4.2.2 et ipython 5.1.0 installés avec conda . Comme mentionné ci-dessus, j'ai déjà installé le shutil_get_terminal_size :

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

Cependant, dans le shell python standard, la commande import backports.shutil_get_terminal_size échoue.

Ok, j'ai trouvé une solution brute mais simple : désinstaller et réinstaller. Maintenant, ipython fonctionne...

$ 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

Également rencontré ce problème
Malheureusement, rien de ce qui précède n'a beaucoup aidé, mais le problème est exactement comme indiqué ci-dessus :

ImportError : aucun module nommé Shutil_get_terminal_size

Désinstaller et installer IPython et les ports arrière n'était pas une joie.

Le problème était que Jupyter et ses amis étaient installés dans le monde entier et Shutil_get_terminal_size installé dans le monde entier. c'est-à-dire dans /Library/Python/2.7/site-packages/shutil_backports/

Cependant, j'ai également installé backports.functools_lru_cache localement, cela a en fait bloqué l'importation de shutdown_backports.

Pour tester si c'est le problème : ls ~/Library/Python/2.7/lib/python/site-packages (Sur OSX, si vous voyez un dossier back ports, c'est probablement en faute. J'ai désinstallé la bibliothèque de la bibliothèque utilisateur et ajouté dans la bibliothèque système. De toute façon, vous ne mélangez pas et ne faites pas correspondre vos ports arrière. Il doit être global ou local pour fonctionner pleinement.

Même problème dans Debian Sid (Unstable) entièrement mis à jour. J'ai mis à jour pip; essayé de désinstaller et d'installer à nouveau à partir de frais ; etc. Rien n'a fonctionné.

# 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

désinstaller et installer backports.shutil_get_terminal_size fonctionne à nouveau.

+1 dans osx. Même problème, - Désinstaller global et installer dans virtualenv fonctionne et pointe vers local.

@Hiczeke j'ai essayé ça et ça n'a pas fonctionné

Après avoir essayé beaucoup de choses, la dernière commande résolue était la mise setuptools jour de
Je recommanderais:

  • Désinstallez tous les packages système, comme Debian ipython et python-backports-shutil-get-terminal-size
  • Désinstaller avec pip : ipython , jupyter et backports.shutil_get_terminal_size
  • Mettre pip niveau setuptools: pip install --upgrade setuptools pip`
  • Réinstallez ipython (et autres) avec pip : pip install ipython jupyter

Ce qui suit a résolu le problème pour moi:
pip désinstaller backports.shutil_get_terminal_size
pip install backports.shutil_get_terminal_size

@Paul Richter @Hiczeke
Merci beaucoup!
la réinstallation de "backports.shutil_get_terminal_size" a bien fonctionné pour moi.

pip install --upgrade --force-reinstall ipython

Cela a résolu le problème sur mon Mac

Je suis assez confus :

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

Corrigé pour toi, Ian.

sudo pip désinstaller backports.shutil_get_ terminal _size

sudo pip install backports.shutil_get_ terminal _size

Le mercredi 25 janvier 2017 à 12h52 Ian Hincks [email protected]
a écrit:

Je suis assez confus :

sudo pip désinstaller backports.shutil_get_window_size

Impossible de désinstaller l'exigence backports.shutil-get-window-size, non installé

sudo pip install backports.shutil_get_window_size

Impossible de trouver une version qui satisfait l'exigence backports.shutil_get_window_size (à partir des versions : )
Aucune distribution correspondante trouvée pour backports.shutil_get_window_size

-
Vous recevez ceci parce que vous avez été mentionné.
Répondez directement à cet e-mail, consultez-le sur GitHub
https://github.com/ipython/ipython/issues/9656#issuecomment-275197674 ,
ou couper le fil
https://github.com/notifications/unsubscribe-auth/ATln0kDS_u6PaTk6Qunjc_oEtKCv_-cRks5rV5n7gaJpZM4I9MnS
.

@Paul-Richter Ah, merci :)

Aucun des éléments de désinstallation/réinstallation n'a fonctionné pour moi. Ce qui a finalement fonctionné pour moi a été suggéré par @ternus dans un commentaire ci-dessus : ouvrez (sur 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

@ihincks : Votre commentaire a résolu mon problème sur osx 😃

Je suis tombé sur cette erreur aujourd'hui sur OS X 10.12.3. Les problèmes suivants ont été résolus :

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

Je ne pense pas qu'il s'agisse d'une erreur ipython. Recommander la fermeture.

Je suis presque sûr que ce n'est pas une erreur IPython, mais j'aimerais pouvoir déterminer ce qui ne va pas afin que nous puissions offrir aux gens de meilleures solutions que réinstaller + espérer ...

@pierre-haessig Vous me sauvez la vie. Merci beaucoup.

@ihincks J'ai essayé tous les messages mais aucun n'a fonctionné. Il n'y avait que le vôtre qui fonctionnait. Tu es un sauveur :)

correctif par ihincks fonctionne également sur Windows 10

J'espère que ça pourra aider quelqu'un.
dans mon cas, j'ai trouvé que la racine du problème était une mauvaise version d'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

Je ne sais pas comment cela a pu arriver car je n'ai pas du tout de version python3.
Mon problème a été résolu lorsque j'ai désinstallé Python et supprimé les bibliothèques associées

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

J'ai réinstallé python et je m'assure que pip a la version et l'emplacement corrects.
pip 9.0.1 from /usr/local/lib/python2.7/site-packages (python 2.7)
pip2 install ipython

@ihincks

C'est la seule bonne réponse pour moi.

sudo pip désinstaller backports.shutil_get_terminal_size
sudo pip install backports.shutil_get_terminal_size

Pip ne devrait probablement pas s'habituer à sudo.
L'utilisation de sudo avec pip est ce qui conduit les systèmes à être brisés de la manière dont cela
problème décrit.

Si vous devez utiliser sudo, alors quelque chose ne va pas avec votre système.

M

>

@ihincks Sur FreeBSD, seule votre solution a fonctionné ! Merci beaucoup!

Pour info, j'ai rencontré le même problème, mais je n'ai pu contourner le problème de shutil_get_terminal_size qu'en utilisant l'option --ignore-installed dans pip. Sans cela, le package ne se réinstallerait pas correctement.

pip install --ignore-installed backports.shutil_get_terminal_size

La réponse de @AllanDaemon a résolu le problème pour moi !

Face à un problème similaire et il a été résolu en désinstallant et en réinstallant backports.shutil_get_terminal_size

pip désinstaller backports.shutil_get_terminal_size
pip install backports.shutil_get_terminal_size

J'ai eu le même problème.
Après avoir essayé de nombreuses solutions ci-dessus, j'ai finalement découvert que le problème était dû à mon paramètre $ PATH.
Peut-être qu'auparavant j'avais utilisé l'option pip install --user , de sorte que /home/jin/.local/lib/python2.7 était dans mon $PATH, où une autre version de backports existait.
J'ai résolu ce problème en supprimant le dossier .local/lib/python2.7 .

Pour tester s'il y a un problème avec vous $PATH, vous pouvez simplement essayer

import sys
print sys.path

Le problème est causé par la présence de "backports" dans les emplacements "Système" et "Utilisateur".
Sur mon macOS, j'avais installé Shutil_get_terminal_size dans le système, mais j'avais un autre package installé dans ma maison d'utilisateur. Ce dossier utilisateur est prioritaire et vous ne recherchez pas dans System.
Installez tous vos packages python, avec --user is wise.
Si vous êtes bloqué, forcez une réinstallation avec --user :
pip install --ignore-installed backports.shutil_get_terminal_size --user
Cela devrait probablement être ajouté à certains diagnostics car cela me dérange à chaque fois

backports est censé être un "paquet d'espace de noms", qui est autorisé à avoir des sous-paquets installés à différents endroits comme celui-ci. Mais cela ne semble pas fonctionner de manière fiable, et je ne peux pas comprendre pourquoi. Je ne peux pas le reproduire pour le déboguer localement, et mes tentatives pour le déboguer via d'autres personnes sont tout simplement déroutantes.

@takluyver Avez-vous vu https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=843898 ? Les 2-3 derniers messages sont intéressants.

Malheureusement, cela ressemble plus ou moins à ce que j'ai trouvé - quelque chose perturbe le package d'espace backports noms

J'ai commenté ici https://github.com/chrippa/backports.shutil_get_terminal_size/issues/9#issuecomment -279021331 et référencé ci-dessus pour trouver une différence entre la roue et l'installation sans roue (non binaire) via pip, est-ce que quelque chose de pertinent ?

Qu'en est-il des fournisseurs comme solution de repli pour la prochaine version d'IPython ?

Est-ce quelque chose qui pourrait être rétroporté dans le Shutil de CPython?

Est-ce quelque chose qui pourrait être rétroporté dans le Shutil de CPython?

Probablement non, nous n'utilisons déjà pas le package backport sur IPython 6.0/master, c'est déjà dans toutes les écuries CPython que nous prenons en charge, et le problème ne se produit que parce que nous utilisons le package backport sur 2.7 car ce n'est pas dans la norme CPython 2.7.

J'ai compris. Merci @Carreau. Heureux que ce ne soit qu'un problème temporaire.

La suppression de l'installation globale, la désinstallation dans virtualenv et la réinstallation dans virtualenv ont résolu le problème pour moi.

Ce dont vous avez besoin, tapez simplement les commandes ci-dessous :

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

J'avais le même problème et cela le résout.

salut
même problème sur Ubuntu 17.10 avec ipython2.
Pas de problème avec python3

CORRECTIF : 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 s'il vous plaît ne conseillez pas aux gens d'utiliser sudo pip , cela va juste casser votre système de manière plus étrange à long terme. Pip se battra avec le gestionnaire de paquets système pour certains fichiers.

C'est l'équivalent de retirer la pile de votre détecteur de monoxyde de carbone car il vous réveille régulièrement la nuit. Il y a quelque chose qui ne va pas avec votre appareil de chauffage ; vous avez besoin d'une solution appropriée.

Merci @Carreau
Je corrigerai ma réponse après avoir éteint le feu chez moi.

Ps s'il vous plaît corriger le "bruyère" -> dépendances deb

La solution la plus simple consiste probablement à installer une version plus récente d'IPython avec pip install --user ipython (le drapeau --user signifie qu'il n'a pas besoin de sudo). Nous avons déjà contourné ce problème dans IPython, mais nous ne pouvons pas contrôler les packages Debian, et les utilisateurs qui installent via apt obtiennent une version obsolète d'IPython.

Si quelqu'un rencontre le même problème avec Cygwin et python2, la solution consiste à exécuter Cygwin setup.exe (ou l'un des utls apt-cyg) et à installer python2-backports.shutil_get_terminal_size . Ce n'est pas déclenché en tant que dépendance par défaut, il doit donc être installé manuellement.

ipython3 est prêt à l'emploi.

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

Questions connexes

quchunguang picture quchunguang  ·  3Commentaires

ericdill picture ericdill  ·  3Commentaires

jakirkham picture jakirkham  ·  4Commentaires

okomarov picture okomarov  ·  3Commentaires

jwkvam picture jwkvam  ·  4Commentaires