【问题标题】:Python 2.6 -- paramiko import errorPython 2.6——paramiko 导入错误
【发布时间】:2014-07-22 12:09:36
【问题描述】:

我有一些脚本在 cron 中每 30 分钟运行一次,导入 paramiko。看似随机,我会在导入过程中遇到以下两个错误之一:

Traceback (most recent call last):
  ...
  File "build/bdist.linux-x86_64/egg/paramiko/__init__.py", line 65, in <module>
  File "build/bdist.linux-x86_64/egg/paramiko/transport.py", line 42, in <module>
  File "build/bdist.linux-x86_64/egg/paramiko/packet.py", line 39, in <module>
  File "build/bdist.linux-x86_64/egg/Crypto/Hash/HMAC.py", line 66, in <module>
  File "build/bdist.linux-x86_64/egg/Crypto/Util/strxor.py", line 7, in <module>
  File "build/bdist.linux-x86_64/egg/Crypto/Util/strxor.py", line 6, in __bootstrap__
ImportError: dynamic module does not define init function (initstrxor)

-- 或者--

Traceback (most recent call last):
  ...
  File "build/bdist.linux-x86_64/egg/paramiko/__init__.py", line 65, in <module>
  File "build/bdist.linux-x86_64/egg/paramiko/transport.py", line 53, in <module>
  File "build/bdist.linux-x86_64/egg/Crypto/Cipher/ARC4.py", line 66, in <module>
  File "build/bdist.linux-x86_64/egg/Crypto/Cipher/_ARC4.py", line 7, in <module>
  File "build/bdist.linux-x86_64/egg/Crypto/Cipher/_ARC4.py", line 6, in __bootstrap__
ImportError: dynamic module does not define init function (init_ARC4)

每次我看到此问题时,只需重新运行脚本即可让paramiko 正确导入并完成脚本。

什么会导致这个问题?非常感谢任何帮助。

【问题讨论】:

    标签: python unix python-2.6 paramiko


    【解决方案1】:

    虽然我不知道是什么导致了这个错误,但它似乎在 pycrypto 的本机部分失败了,所以你可能需要重试几次:

    from time import sleep
    n_tries= 3
    import_success= False
    
    while not import_success:
        try:
            from Crypto.Cipher import Blowfish, AES, DES3, ARC4
            from Crypto.Hash import MD5, SHA, SHA256, HMAC
            from Crypto import Random
            from Crypto.PublicKey import DSA, RSA
            from Crypto.Util import Counter, number
            import_success= True
        except ImportError:
            if not n_tries:
                raise #re-raise ImportError
            n_tries-=1
            sleep(1)
    

    【讨论】:

    • 我希望避免这样的事情,但至少这是后备计划。谢谢!