2015-03-31 16 views
9

Tôi đã cài đặt mô-đun paramiko. Tuy nhiên, khi tôi cố gắng nhập mô-đun đó. Tôi nhận được lỗi sau.Lỗi paramiko nhập khẩu bằng Python "không thể nhập tên 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 

Có ai biết cách giải quyết vấn đề này không?

+0

Bạn đã sử dụng lệnh nào để cài đặt paramiko? – narendranathjoshi

+0

Có ai tìm ra điều này không? – firebait

+1

Chỉ cần kiểm tra trên một cài đặt Linux, và /usr/lib/python2.7/dist-packages/paramiko/transport.py có cùng một dòng (nhưng ở 33). Lỗi "không thể nhập tên" này thường liên quan đến nhập khẩu phụ thuộc theo vòng, nhưng paramiko thường không có vấn đề đó (xem http://stackoverflow.com/questions/9252543/importerror-cannot-import-name-x ví dụ). Phiên bản nào của python? Bạn có nhập những thứ khác trước ví dụ của mình không? –

Trả lời

1

Tôi vừa có cùng một vấn đề (python 2.7.6), và chạy vào câu trả lời này ở đây ImportError: Cannot import name X, được đề cập trong các bình luận của câu hỏi, cho thấy đó là một vấn đề phụ thuộc vòng tròn.

Sau khi không tìm thấy bất kỳ giải pháp thanh lịch tôi thấy mình chỉnh sửa mã nguồn paramiko trong site-packages/paramiko/transport.py:

  • Comment/xóa dòng from paramiko import util
  • Thay thế mỗi lần xuất hiện của util (trong tập tin này) để paramiko.util
  • Hãy cẩn thận khi thay thế: KHÔNG thay thế các lần xuất hiện hiện tại của paramiko.util

Điều này đã khắc phục vấn đề cho tôi, khiến tôi hơi bối rối: một mặt, sửa đổi phương thức nhập dường như giải quyết vấn đề này, nhưng mặt khác Python xử lý nó như ... 99% các trường hợp .. ? Lúng túng.

0

Chúng tôi chỉ có thể chỉnh sửa các dòng nhập khẩu là:

from . import util 

Vì vậy, chúng ta không cần phải thay đổi mỗi lần xuất hiện.

Điều lạ lùng là sau khi sửa chữa này trong paramiko 2.4, tôi có một lỗi nhập khẩu, đó là:

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

Nó chỉ ra rằng tôi đã bằng cách nào đó được cài đặt cyrus-sasl-gssapi trong đó có các mô-đun gssapi nhưng không GSSException. Vì vậy, python là nhầm lẫn. Tôi đã xóa gói và tất cả đều ổn. Nếu bạn có python-gssapi, hãy đảm bảo xóa điều đó.

Đây là vấn đề của paramiko (#1069). Nhưng không cố định trong paramiko 2.4 cho Python 2.7. Đã báo cáo nó.

Các vấn đề liên quan