2015-03-31 27 views
9

Ho installato il modulo paramiko. Tuttavia, quando ho provato a importare quel modulo. Ho ricevuto il seguente errore.Errore paramiko importazione Python "impossibile importare nome util"

import paramiko 
--------------------------------------------------------------------------- 
ImportError        Traceback (most recent call last) 
<ipython-input-42-e77d47aa6e4a> in <module>() 
----> 1 import paramiko 

C:\Anaconda\lib\site-packages\paramiko\__init__.py in <module>() 
    28 
    29 
---> 30 from paramiko.transport import SecurityOptions, Transport 
    31 from paramiko.client import SSHClient, MissingHostKeyPolicy, AutoAddPolicy, RejectPolicy, WarningPolicy 
    32 from paramiko.auth_handler import AuthHandler 

C:\Anaconda\lib\site-packages\paramiko\transport.py in <module>() 
    30 
    31 import paramiko 
---> 32 from paramiko import util 
    33 from paramiko.auth_handler import AuthHandler 
    34 from paramiko.ssh_gss import GSSAuth 

ImportError: cannot import name util 

Qualcuno sa come risolvere questo problema?

+0

Quale comando hai usato per installare paramiko? – narendranathjoshi

+0

Qualcuno lo ha capito? – firebait

+1

Appena controllato su un'installazione Linux, e /usr/lib/python2.7/dist-packages/paramiko/transport.py ha la stessa riga (ma a 33). Questo errore "impossibile importare nome" si riferisce spesso alle importazioni dipendenti dalla circolarità, ma in genere Paramiko non ha questo stesso problema (vedi http://stackoverflow.com/questions/9252543/importerror-cannot-import-name-x per un esempio). Quale versione di Python? Stai importando altre cose prima del tuo esempio? –

risposta

1

Ho appena avuto lo stesso problema io stesso (python 2.7.6), e ho trovato questa risposta qui ImportError: Cannot import name X, che è stata indicata nei commenti della domanda, suggerendo che si tratta di un problema di dipendenza circolare.

Dopo non trovare alcuna soluzione elegante mi sono trovato modificando il codice sorgente di paramiko in site-packages/paramiko/transport.py:

  • Commento/rimuovere la riga from paramiko import util
  • Sostituire ogni occorrenza di util (in questo file) per paramiko.util
  • Fare attenzione durante la sostituzione: NON sostituire le occorrenze esistenti di paramiko.util

Questo ha risolto il problema per me, lasciandomi un po 'confuso: da un lato, la modifica del metodo di importazione sembra risolvere questo problema, ma d'altra parte Python lo gestisce come ... il 99% dei casi .. ? Awkward.

0

Possiamo solo modificare la riga di importazione sia:

from . import util 

Quindi non c'è bisogno di cambiare ogni occorrenza.

è strano che dopo aver fissato questo paramiko 2.4, ho un altro errore di importazione, che è:

> python 
Python 2.7.5 (default, Aug 4 2017, 00:39:18) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-16)] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import paramiko 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/lib/python2.7/site-packages/paramiko/__init__.py", line 22, in <module> 
    from paramiko.transport import SecurityOptions, Transport 
    File "/usr/lib/python2.7/site-packages/paramiko/transport.py", line 38, in <module> 
    from paramiko.auth_handler import AuthHandler 
    File "/usr/lib/python2.7/site-packages/paramiko/auth_handler.py", line 48, in <module> 
    from paramiko.ssh_gss import GSSAuth, GSS_EXCEPTIONS 
    File "/usr/lib/python2.7/site-packages/paramiko/ssh_gss.py", line 54, in <module> 
    GSS_EXCEPTIONS = (gssapi.GSSException,) 
AttributeError: 'module' object has no attribute 'GSSException' 

Si scopre che ho in qualche modo installato cyrus-sasl-gssapi che ha il modulo gssapi ma senza GSSException. Quindi python è confuso. Ho rimosso il pacchetto e tutto va bene. Se hai python-gssapi, assicurati di rimuoverlo anche tu.

È un problema di paramiko (#1069). Ma non riparato in paramiko 2.4 per Python 2.7. L'ho segnalato