我正在运行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)。
答案 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
)