Ipython: ImportError: Kein Modul namens shutdown_get_terminal_size

Erstellt am 28. Juli 2016  ·  81Kommentare  ·  Quelle: ipython/ipython

Update von @carreau :
Beim Wiedereröffnen und Taggen von 5.4 sollten wir den Anbieter shutdown_get_terminal_size verwenden.


Nach der Installation von ipython sudo apt-get install ipython-notebook , ipython erscheint ein Fehler wie folgt:

jiangyuping@Lenovo :~$ ipython
Traceback (letzter Aufruf zuletzt):
Datei "/usr/local/bin/ipython", Zeile 4, in
aus IPython import start_ipython
Datei „ /usr/local/lib/python2.7/dist-packages/IPython/init.py “, Zeile 48, in
aus .core.application Anwendung importieren
Datei "/usr/local/lib/python2.7/dist-packages/IPython/core/application.py", Zeile 25, in
aus der IPython.core-Importversion, Crashhandler
Datei "/usr/local/lib/python2.7/dist-packages/IPython/core/crashhandler.py", Zeile 28, in
von IPython.core import ultratb
Datei "/usr/local/lib/python2.7/dist-packages/IPython/core/ultratb.py", Zeile 128, in
aus IPython.utils.terminal import get_terminal_size
Datei "/usr/local/lib/python2.7/dist-packages/IPython/utils/terminal.py", Zeile 22, in
aus backports.shutil_get_terminal_size importieren Sie get_terminal_size als _get_terminal_size
ImportError: Kein Modul namens shutdown_get_terminal_size

Hilfreichster Kommentar

@oschow das _sollte_ generell funktionieren:

# 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

Alle 81 Kommentare

Sie haben eine neuere Kopie von IPython außerhalb von apt installiert und benötigen das Paket backports.shutil_get_terminal_size . Verwenden Sie pip , um das zu installieren.

@takluyver Nach pip install ipython erscheint es

jiangyuping@Lenovo :~/ipython$ pip installiere ipython
Voraussetzung bereits erfüllt (verwenden Sie --upgrade zum Upgrade): ipython in /usr/local/lib/python2.7/dist-packages

dann erscheint ipython

jiangyuping@Lenovo :~/ipython$ ipython
Traceback (letzter Aufruf zuletzt):
Datei "/usr/local/bin/ipython", Zeile 4, in
aus IPython import start_ipython
Datei " /home/jiangyuping/ipython/IPython/init.py ", Zeile 48, in
aus .core.application Anwendung importieren
Datei "/home/jiangyuping/ipython/IPython/core/application.py", Zeile 25, in
aus der IPython.core-Importversion, Crashhandler
Datei "/home/jiangyuping/ipython/IPython/core/crashhandler.py", Zeile 28, in
von IPython.core import ultratb
Datei "/home/jiangyuping/ipython/IPython/core/ultratb.py", Zeile 128, in
aus IPython.utils.terminal import get_terminal_size
Datei "/home/jiangyuping/ipython/IPython/utils/terminal.py", Zeile 22, in
aus backports.shutil_get_terminal_size importieren Sie get_terminal_size als _get_terminal_size
ImportError: Kein Modul namens shutdown_get_terminal_size

Ich meinte:

pip install backports.shutil_get_terminal_size

Wenn es dies jedoch nicht als Abhängigkeit von IPython bringt, bedeutet das wahrscheinlich, dass Sie eine alte Version von Pip haben. So aktualisieren Sie es:

pip install --upgrade setuptools pip

Danke, erfolgreich installiert.

Ich habe vieles ausprobiert. Das letzte Problem, das gelöst wurde, war das Aktualisieren setuptools . Ich habe auch pip aktualisiert und ipython neu installiert usw.

Danke! Dies hat bei mir nicht funktioniert. Aber es brachte mich auf eine Idee ... Ich habe eine Pip-Installation durchgeführt - mit einer whl-Datei der backports.shutil_get_terminal_size aktualisiert

Davor führte eine einfache Pip-Installation zu "Anforderung bereits erfüllt" usw.
Jetzt kann ich Turi's GraphLab Create ausführen :)

@jnault Ich habe das gleiche Problem, weil ich versucht habe, Turi's GraphLab Create zu installieren. Welche genauen Befehle hast du verwendet?

Ich erinnere mich nicht genau, aber ich erinnere mich, dass es ziemlich einfach ist. Meine Schritte:
1) Google-Suche nach dieser Datei mit der Erweiterung .Whl und
2) Google-Suche So installieren Sie eine Whl-Datei
Hm. Ok, das sieht snarky oder so aus. Ich bin aufrichtig und versuche zu helfen. Aber das ist buchstäblich das, was ich tat. Ziemlich sicher, dass die Datei von pypi stammt. Ich vermute, eine WHL-Datei könnte irgendetwas installieren, so dass ich sichergestellt habe, dass es von einer seriösen Quelle kam.
Ich vermute, der Befehl lautete: pip install --upgrade backports.shutil_get_terminal_size.whl

@oschow das _sollte_ generell funktionieren:

# 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 hat bessere Ratschläge.
Minrk, du hast geschrieben "wenn Pip denkt, dass du es schon hast, es aber nicht zu haben scheinst". Es ist also möglich, dass die Datei in der ersten Python-Installation geplant war, aber dann verpasst wurde? Es wird also als vorhanden aufgeführt, ist es aber wirklich nicht?

Ich hatte das gleiche Problem bei dem Versuch, Graphlab Create zu installieren. Minrks Lösung hat es auch für mich behoben.

@minrk hatte die funktionierende Lösung für mich, nur eine Deinstallation gefolgt von einer Installation funktionierte für mich.
Hier ist, was ich getan habe.

Deinstallieren Sie, wenn pip glaubt, dass Sie es bereits haben, aber es scheint nicht so zu sein:

pip deinstallieren backports.shutil_get_terminal_size

Installieren Sie es erneut ohne definitiv aktuellen Pip:

pip install --upgrade backports.shutil_get_terminal_size

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

@bevice Und dann?

Bisher konnte ich mit keinem der Vorschläge in diesem Thread oder einem anderen Thread Abhilfe schaffen.

Wenn ich laufe

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

Es klappt. Aber das Ausführen von ipython oder jupyter notebook gibt mir den gleichen Fehler, dass es shutdown_get_terminal_size nicht findet

Ich denke, das bedeutet, dass Sie irgendwo ein anderes backports.<something> -Paket installiert haben, das die Namespace-Paketmaschinerie durcheinander gebracht hat. Sie müssen das wahrscheinlich finden und deinstallieren. Versuchen Sie pip list , um alle installierten Pakete anzuzeigen.

@takluyver Danke für die schnelle Antwort.

Das habe ich gefunden:

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

Was kann ich jetzt machen?

Deinstallieren Sie backports.ssl-match-hostname und backports.shutil-get-terminal-size und installieren Sie sie erneut.

Muss ich Anaconda oder etwas "neu starten", damit die Änderungen wirksam werden? Das Deinstallieren der beiden von Ihnen genannten Pakete und das erneute Installieren hat nicht funktioniert.

Nein, es gibt keinen Neustart. Um sicherzugehen, versuchen Sie nach der Deinstallation die Deinstallation erneut. Wiederholen Sie dies, bis nichts zum Deinstallieren gefunden werden kann. Manchmal gibt es Kopien an verschiedenen Orten.

Wenn das immer noch nicht funktioniert, versuchen Sie, backports.ssl-match-hostname zu deinstallieren und es deinstalliert zu lassen (zumindest bis Sie finden, was es braucht ...)

In Ordung. Ich habe alles versucht, was du gesagt hast, aber nichts funktioniert. Welche Möglichkeiten habe ich? Das Problem begann, als ich pymc3 installierte. Die andere Sache ist, dass ich einige Skripte geändert habe, um der nipype-Toolbox einige Module hinzuzufügen. Soll ich einfach alles entfernen und neu installieren? Das wäre der letzte Ausweg, hoffe ich.

Was bekommen Sie, wenn Sie dies in demselben Python versuchen, mit dem Sie versuchen, IPython auszuführen:

import backports
print(backports)

Ich habe es mit installierten Backports ausgeführt:

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

Dann deinstalliert und erneut ausgeführt:

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

Anscheinend habe ich irgendwo einige eingebaute Pakete, die Dinge vermasseln. Aber ich habe keine Ahnung, wie ich sie finden soll. Selbst wenn ich sie finde, kann ich möglicherweise nichts ändern, da ich keine Root-Berechtigungen habe.

Befindet sich noch etwas anderes in dem Ordner, das Ihnen dort angezeigt wurde ( /nobackup/archimedes1/Glad/anaconda2_serverwide/lib/python2.7/site-packages/backports/ )?

Nein, jetzt, wo es deinstalliert ist, fehlt der Ordner vollständig. Genauso wie der Ordner
../site-packages/backports.shutil-get-terminal-size-1.0.0 , das früher dort war, als es installiert wurde.

Können Sie backports.__path__ in Python überprüfen?

Ohne installierte Backports:
['/nobackup/archimedes1/Glad/anaconda2_serverwide/lib/python2.7/site-packages/backports']

Das ist das gleiche Verzeichnis wie vorher? Fehlt es definitiv ? Ich verstehe nicht, wie es diesen Pfad finden könnte, wenn dort nichts ist.

Ich habe im Verzeichnis anaconda2_serverwide nach allen möglichen Backports gesucht. Ich bin mir nicht sicher, was das alles bedeutet.
Das habe ich gefunden:

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

Hatten Sie Python nach der Deinstallation backports neu gestartet? Wenn nicht, können Sie Python neu starten und backports.__path__ erneut überprüfen? Ich kenne keine Möglichkeit, diesen Pfad zu identifizieren, wenn dort keine Datei vorhanden ist.

Wie starte ich Python neu?

Folgendes habe ich auch probiert:

> 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  

Also habe ich conda verwendet, um backports.shutil_get_terminal_size zu entfernen:
> conda uninstall backports.shutil_get_terminal_size

Wenn ich jetzt versuche, backports.shutil_get_terminal_size in Python zu importieren, wird es nicht gefunden. Also habe ich ipython und jupyter entfernt und ipython über conda neu installiert, wodurch auch jupyter und backports.shutil_get_terminal_size installiert wurden. Allerdings funktioniert es _noch_ nicht! Ich bin ratlos.

Ich habe dann die Installationen über conda entfernt und über pip neu installiert. Es geht _noch_ nicht....

Wie starte ich Python neu?

Schließen Sie es ( exit() ) und starten Sie es dann erneut.

Auf Backports geprüft:

> 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  

Python nach dem Neustart ausgeführt:

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

Habe versucht es zu upgraden:

> 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

Ich verstehe es nicht. Was kann ich sonst noch tun? Kann ich „terminal.py“ bearbeiten, um es in die richtige Richtung zu lenken?

Wenn Sie alle Backport-Pakete deinstallieren, starten Sie Python neu und überprüfen Sie:

import backports
backports.__path__

Was bekommst du?

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

Ist irgendetwas im vorherigen Verzeichnis installiert (das unter /home/raid2 )?

Das ist das Verzeichnis, in dem die systemweiten Python- und Ipython-Pakete gespeichert sind. Ich verwende sie jedoch nicht, da ich die lokale Anaconda-Installation verwende. Und es sollte nicht stören. Um ehrlich zu sein, im Verzeichnis /home/raid2... gibt es kein Paket backports.shutil_get_terminal_size.

Wenn ich die systemweite Installation ausführe (die eine ältere Version von ipython hat), läuft sie einwandfrei. Aber wenn ich starte meine Umgebung mit der neueren anaconda installiere mit
export PATH="/nobackup/archimedes1/Glad/anaconda2_serverwide/bin:$PATH" , es kann die Fenstergrößenfunktion nicht finden.

Ich habe ein Skript erstellt, um zu versuchen, dies zu debuggen. Kannst du es ausführen und die Ausgabe posten?

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

In Ordnung!!! 1

Das habe ich getan, damit es irgendwie funktioniert.
Ipython und Jupyter und backports.shutil_get_window_size mit conda und pip deinstalliert:

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

Ich habe dafür gesorgt, dass von keinem Paket mehr übrig ist. Dann habe ich nur ipython mit conda neu installiert:

> 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

Und jetzt funktioniert es!!! Danke für deine großzügige Zeit @takluyver !

Hier ist die Ausgabe Ihres Skripts:

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, freut mich, dass es funktioniert. Die Ausgabe des Skripts zeigt nun die Dinge so, wie sie sein sollen; Hoffentlich könnte das Skript nützlich sein, wenn jemand dieses Problem in Zukunft hat.

Ich habe auch das gleiche Problem. Alles von Anfang an probiert, alles deinstalliert und installiert. Führte auch das Skript aus, das Sie oben geteilt haben -
Hier ist die Ausgabe:

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

Kannst du mir dabei helfen? Ich möchte Conda aber nicht verwenden.

Danke!

Gibt es etwas in /Users/shiva/Library/Python/2.7/lib/python/site-packages/backports ? Können Sie versuchen, es zu entfernen/umzubenennen?

Gibt es etwas in /Users/shiva/Library/Python/2.7/lib/python/site-packages/backports? Können Sie versuchen, es zu entfernen/umzubenennen?

Versucht, immer noch das gleiche Problem.

Ich habe eine Änderung am Debugging-Skript vorgenommen, können Sie versuchen, es erneut abzurufen und erneut auszuführen.

Hier ist die Ausgabe -

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

Haben Sie Python neu gestartet, seit Sie dieses Verzeichnis entfernt/umbenannt haben? Irgendwie findet es ihn immer noch.

Ich führe das Skript mit dem Befehl "python debug_namespace_pkg.py" aus. Und ich habe das Terminal neu gestartet, bevor ich es getan habe.

Und /Users/shiva/Library/Python/2.7/lib/python/site-packages/backports existiert definitiv nicht? Wie zuvor verstehe ich nicht, wie es einen Verweis auf einen Ordner erhält, der anscheinend nicht vorhanden ist.

Ja, ich habe es an der von Ihnen angegebenen Stelle umbenannt. Bist du sicher, dass du nicht /usr/local/lib/python2.7/site-packages/backports meinst?

Nein, das ist es, was es finden muss. Der unter /Users/shiva scheint ihm irgendwie im Weg zu stehen. Diese Zeile zeigt, dass es immer noch irgendwie gefunden wird:

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

Aber ich verstehe nicht, wie das möglich ist, nachdem Sie es entfernt haben. :verwirrt:

Aha, da ist etwas, von dem ich noch nie etwas gewusst habe: .pkg Dateien. Können Sie nach einer Datei namens backports.pkg suchen?

( backports.pkg befindet sich wahrscheinlich in einem dieser site-packages Verzeichnisse, obwohl es sich woanders auf Ihrem System befinden könnte)

Ich kann backports.pkg nirgendwo finden. Ich habe find ./* -name backports.pkg im Stammordner verwendet.

Endlich hat es funktioniert.

Das Umbenennen dieses Ordners funktioniert nicht, das Entfernen jedoch. Vielen dank für Deine Hilfe :)

Seltsam, ich verstehe nicht, warum das Entfernen anders wäre als das Umbenennen. Schön, dass es trotzdem funktioniert.

Ich habe ähnliche Probleme und das Deinstallieren/Installieren von Pip scheint nicht zu helfen. Dies ist die Ausgabe Ihres Debugging-Skripts (wegen 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__)

Ich habe:

$ 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

Ich habe es schließlich mit der folgenden Hack-Methode zum Laufen gebracht. Öffnen Sie (unter Linux) /usr/local/lib/python2.7/dist-packages/IPython/utils/terminal.py und ändern Sie die Zeile

from backports.shutil_get_terminal_size import get_terminal_size as _get_terminal_size

zu

from shutil_backports import get_terminal_size as _get_terminal_size

Wieder das Gleiche - irgendwie findet es ein Verzeichnis, das nicht dort zu sein scheint. Können Sie auch nach einer backport.pkg -Datei suchen? Ich füge das dem Skript hinzu.

Ausgabe vom letzten Skript:

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

Das ist ärgerlich; Ich kann nicht herausfinden, wie es den ersten Pfad findet ( /home/ihincks/... ).

Gibt es noch etwas anderes in /home/ihincks/.local/lib/python2.7/site-packages/ , das erklären könnte, warum es dort backports findet?

Ich weiß nicht genau wonach ich suchen soll. Hier ist alles in /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

Was ist backports.shutil_get_terminal_size-1.0.0 und was ist drin?

Es ist ein Python-Paket, das die einzelne Funktion get_terminal_size in backports.shutil_get_terminal_size offenzulegen scheint. Dieser Ordner hat eine Struktur:

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

Der Inhalt von PKG-INFO ist:

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, ich vermute, Sie haben die sdist dort irgendwann manuell entpackt. Macht das Löschen des gesamten Verzeichnisses ( backports.shutil_get_terminal_size-1.0.0 ) einen Unterschied? Ich vermute, dass es nur ein Ablenkungsmanöver ist.

Okay, /usr/local/lib/python2.7/dist-packages/IPython/utils/terminal.py wurde in die ursprüngliche Form zurückversetzt. ipython und ImportError: No module named shutil_get_terminal_size Fehler erhalten.

Dann den Ordner /home/ihincks/.local/lib/python2.7/site-packages/backports.shutil_get_terminal_size-1.0.0 /home/ihincks verschoben. ipython erneut ausgeführt, mit demselben Fehler.

OK, dieser Ordner ist also nur ein Ablenkungsmanöver, und ich bin immer noch im Dunkeln darüber, wie er /home/ihincks/.local/lib/python2.7/site-packages/backports findet :-(

Hmm, ich wünschte, ich könnte mehr helfen, ich verstehe nur halb, was vor sich geht; Python-Pfad/Bibliotheks-Installationszeug verwirrt mich im Allgemeinen.

Kein Problem, das scheint ziemlich gut versteckte schwarze Magie zu sein.

Wenn jemand dies auf einem System replizieren kann, auf dem es ihm nichts ausmacht, mir ssh-Zugriff zu geben, um herumzustöbern und zu versuchen, zu verstehen, was vor sich geht, wenden Sie sich bitte an mich.

Ich habe auch das gleiche Problem....... Ich habe kürzlich Jupyter installiert und als ich versuchte, eine Ipython-Notebook-Datei zu öffnen, hieß es, der Kernel sei tot, mit einem Importfehler für backports.shutil_get_terminal_size. Schließlich habe ich dieses Problem gelöst, nachdem ich pip aktualisiert, jupyter und backports.shutil-get-terminal-size mehrmals neu installiert hatte ... und schließlich diesen Befehl ausgeführt hatte: python2 -m ipykernel install --user. Das gab meinem Kernel Leben. Ref: http://askubuntu.com/questions/847263/install-jupyter-for-python-2-7-in-ubuntu-14-04

Also bin ich auf dieses Problem gestoßen und habe beim Überprüfen von /usr/lib/python2.7/site-packages/backports.shutil_get_terminal_size-1.0.0.dist-info nur Folgendes gefunden:

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

und nichts zu importieren. Dies nach pip --upgrade, pip uninstall/install ipython und so weiter. Es sieht also so aus, als hätte Pip nicht das Paket installiert, sondern nur das Rad. Ich habe die .tar.gz-Datei heruntergeladen und über das Wheel-Verzeichnis kopiert, wodurch das Problem behoben wurde, das ich mit ipython hatte. Nicht der richtige Weg, um es zu beheben. Ich verwende RHEL7, das hat wahrscheinlich etwas damit zu tun.

Das Verzeichnis, das auf .dist-info endet, ist eine Metadatendatei über das installierte Paket, es soll nichts Importierbares enthalten. Der Code sollte sich in einem angrenzenden Verzeichnis befinden: /usr/lib/python2.7/site-packages/backports

Vielleicht kann Ihnen der Code helfen: pip install --user backports.shutil_get_terminal_size , installieren Sie ihn einfach für den aktuellen Benutzer, wenn Ihr Ipython für Root oder andere Benutzer in Ordnung ist.

Hallo Leute,

wenn ihr versucht, das mit zu beheben

pip install backports.shutil_get_terminal_size

aber es hat nicht funktioniert.

Der beste Weg ist, Ihren sys-Pfad zu untersuchen

import sys
print sys.path

Überprüfen Sie jeden Pfad, ob sich das Backports-Paket vor dem richtigen Pfad des ipython-Modells befindet, und löschen Sie es direkt.

Ich habe eine sehr seltsame Version dieses Fehlers:

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$

Ich kann wirklich nicht sagen, warum Python das native Betriebssystempaket backports / backports.shutil_get_terminal_size nicht findet oder warum es eine gespenstische Version von backports in /usr/local findet /lib. Mein sys.path ist:

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

Ich werde wieder öffnen und als 5.4 markieren. Ich denke, wir sollten shutil_get_terminal_size , um sicher zu sein.

@Carreau fwiw, es fühlt sich an, als ob hier ein Pip- oder Python-Fehler vorliegt, oder ich habe etwas Dummes getan, oder vielleicht beides. Werde es an einigen sachkundigeren Pip-Leuten vorbeiführen.

Ein weiterer Fall, in dem ein backports -Paket gefunden wird, das nicht wirklich vorhanden ist. Einige Leute haben so etwas gemeldet, aber ich kann auch nicht herausfinden, woher es kommt. Könnten Sie versuchen, dieses Skript auszuführen ? Und sehen Sie sich nach .pkg - und .pth -Dateien um, die sich möglicherweise darauf auswirken.

@Carreau Auf meinem System stellte sich heraus, dass das Problem das Vorhandensein des Moduls configparser war:

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

Danke an @erikrose für die Hilfe beim Debuggen.

Schließen als #10587 Anbieter diese Dinge und IPython 5.4 sollte bald veröffentlicht werden

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen