关于importerror:Python导入paramiko错误“无法导入名称util”

Python import paramiko error “cannot import name util”

我已经安装了Paramiko模块。但是,当我尝试导入该模块时。我有以下错误。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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

有人知道如何解决这个问题吗?


我自己也遇到过同样的问题(python 2.7.6),在这里碰到了这个答案。importError:无法导入问题注释中引用的名称x,这表明它是循环依赖性问题。

在没有找到任何优雅的解决方案后,我发现自己在site-packages/paramiko/transport.py中编辑了paramiko的源代码:

  • 注释/删除行from paramiko import util
  • 将每次出现的util替换为paramiko.util
  • 更换时要小心:不要更换现有的EDOCX1[3]
  • 小精灵

    这解决了我的问题,让我有些困惑:一方面,修改import方法似乎可以解决这个问题,但另一方面,python处理它的方式就像……99%的病例….很尴尬。


    尝试重新安装。在我的例子中,它是有效的。

    1
    2
    pip uninstall paramiko
    pip install paramiko --upgrade


    我们只需将导入行编辑为:

    1
    from . import util

    所以我们不必每次都改变。

    奇怪的是,在Paramiko 2.4中修复了这个问题之后,我又出现了一个导入错误,即:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    > 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'

    原来我安装了cyrus-sasl-gssapi,它有模块gssapi,但没有GSSException。所以python很困惑。我把包裹拿了,一切都很好。如果你有python-gssapi,也一定要去掉它。

    这是一个帕拉米科(1069)的问题。但在用于python 2.7的paramiko 2.4中没有修复。已经报告了。


    要添加到Kludge的答案中,我们需要在以下每个文件中用paramiko.util替换"util":transport.py、dsskey.py、ber.py、pkey.py、kex-gex.py、kex-group1.py、kex-gss.py、packet.py、primes.py、sftp-client.py、sftp.py、sftp-server.py。

    引用Kludge的方法以获得更好的清晰度:

    • 注释/删除paramiko import util中的行
    • 将每次出现的util(在此文件中)替换为paramiko.util
    • 替换时要小心:不要替换现有的paramiko.util
    • 小精灵


      我的方法是从这里下载python-utils https://pypi.org/project/utils/文件,pip install-utils-0.9.0-py2.py3-none-any.whl,问题已经解决了。我认为真正的原因是没有lib-utils。