当使用M2Crypto的linting代码时_shutdown AttributeError(忽略)

时间:2011-09-04 23:32:12

标签: python m2crypto pylint

我正在运行lint,如下所示:

$ python -m pylint.lint m2test.py

使用此代码:

import M2Crypto
def f():
    M2Crypto.RSA.new_pub_key("").as_pem(cipher=None).split("\n")

lint输出结束于:

Exception AttributeError: '_shutdown' in <module 'threading' from '/usr/lib/python2.7/site-packages/M2Crypto-0.21.1-py2.7-linux-x86_64.egg/M2Crypto/threading.pyc'> ignored

此代码在运行时工作正常(以上实际上是一个最小的测试用例;但完整版本确实有效)。该异常被忽略,但Bitten认为这是一个失败,因此停止此步骤。

我尝试在函数定义周围添加'M2Crypto.threading.init()'/'M2Crypto.threading.cleanup()',但这并没有解决问题。

如何防止此问题发生?

我在Debian Lenny x86_64上使用M2Crypto 0.21.1,pylint 0.24和Python 2.7(也试过2.7.2)。

4 个答案:

答案 0 :(得分:16)

答案 1 :(得分:3)

非常感谢布兰登·克雷格·罗德斯(Brandon Craig Rhodes)对此进行追踪以及如此详细的帖子。

我已经从hg repository的代码中删除了违规行,直到logilab-astng 0.23.0结束。我可以确认这解决了OP的问题。

答案 2 :(得分:1)

这看起来更像是黑客,但我认为它有效。复制“as_pem()”的结果并将其拆分。

import M2Crypto
def f():
    M2Crypto.RSA.new_pub_key("").as_pem(cipher=None)[:].split("\n")

我使用的是Python 2.6.7,M2Crypto 0.21.1,pylint 0.23

答案 3 :(得分:0)

我无法重现(Ubuntu 11.04 64位上的pylint 0.24和M2Crypto 0.21.1)但有两个建议:

明确初始化线程:

import M2Crypto
def f(): 
    M2Crypto.threading.init()
    M2Crypto.RSA.new_pub_key("").as_pem(cipher=None).split("\n")
    M2Crypto.threading.cleanup()

或者在没有线程的情况下重新编译:

m2crypto = Extension(name = 'M2Crypto.__m2crypto',
                 sources = ['SWIG/_m2crypto.i'],
                 extra_compile_args = ['-DTHREADING'],
                 #extra_link_args = ['-Wl,-search_paths_first'], # Uncomment to build Universal Mac binaries
                 )