2015-03-31 29 views
9

Zainstalowałem moduł Paramiko. Jednak gdy próbowałem zaimportować ten moduł. Dostałem następujący błąd.Python import błąd paramiko "nie można zaimportować nazwy 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 

Czy ktoś wie, jak rozwiązać ten problem?

+0

Z którego polecenia użyłeś do zainstalowania paramiko? – narendranathjoshi

+0

Czy ktoś to wymyślił? – firebait

+1

Właśnie sprawdziłem na instalacji Linuksa, a /usr/lib/python2.7/dist-packages/paramiko/transport.py ma tę samą linię (ale na 33). Ten błąd "nie można zaimportować nazwy" często dotyczy zależnych od kręgów importów, ale paramiko zwykle nie ma takiego problemu (patrz http://stackoverflow.com/questions/9252543/importerror- cannon -import-name-x dla przykładu). Która wersja pythona? Czy importujesz inne rzeczy przed swoim przykładem? –

Odpowiedz

1

właśnie miał ten sam problem sam (Python 2.7.6), i pobiegł do tej odpowiedzi tutaj ImportError: Cannot import name X, która została przekazana w komentarzach na pytanie jest, co sugeruje, że jest to okrągły problem uzależnienia.

Po nie znajdując żadnej eleganckie rozwiązanie znalazłem się edycji kodu źródłowego paramiko w site-packages/paramiko/transport.py:

  • komentarz/usuń linię from paramiko import util
  • zastąpić każde wystąpienie util (w tym pliku) do paramiko.util
  • Zachowaj ostrożność podczas wymiany: NIE zamieniaj istniejących wystąpień paramiko.util

To naprawiło problem dla mnie, pozostawiając mnie nieco zdezorientowanym: z jednej strony modyfikowanie metody importowania wydaje się rozwiązać ten problem, ale z drugiej strony Python radzi sobie z tym w ... 99% przypadków. ? Niezręczny.

0

Możemy tylko edytować linię import być:

from . import util 

Więc nie trzeba zmienić wszystkie wystąpienia.

To dziwne, że po zamontowaniu tego w paramiko 2.4, mam inny błąd importu, który jest:

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

Okazuje się, że w jakiś sposób zainstalować cyrus-sasl-gssapi który posiada moduł gssapi ale bez GSSException. Python jest zdezorientowany. Usunąłem paczkę i wszystko jest w porządku. Jeśli masz python-gssapi, pamiętaj o usunięciu tego również. Jest to problem z paramiko (#1069). Ale nie zostało naprawione w paramiko 2.4 dla Pythona 2.7. Zgłosiłem to.