SSL v2 undefined symbol, Manjaro and Ubuntu



我要报告一个相当复杂的问题。

我正在尝试开发一个跨平台的python软件。我使用的是Manjaro Linux,这是一个基于Arch-linux的发行版。

该软件与cx_freeze一起打包,以方便其分发。所有必需的库都捆绑在包中,用户只需执行一个二进制文件即可启动程序。在Manjaro上,二进制文件运行良好。

但是,当我在 Ubuntu 上尝试时,我遇到了一个奇怪的问题:

Traceback (most recent call last):
  File "/usr/lib/python3.5/site-packages/cx_Freeze/initscripts/Console.py", line 27, in <module>
  File "/tmp/tmpinkmyph0/scripts/gui.py", line 39, in <module>
  File "/usr/lib/python3.5/importlib/_bootstrap.py", line 969, in _find_and_load
    return _find_and_load_unlocked(name, import_)
  File "/usr/lib/python3.5/importlib/_bootstrap.py", line 958, in _find_and_load_unlocked
    module = _load_unlocked(spec)
  File "/usr/lib/python3.5/importlib/_bootstrap.py", line 664, in _load_unlocked
    return _load_backward_compatible(spec)
  File "/usr/lib/python3.5/importlib/_bootstrap.py", line 634, in _load_backward_compatible
    spec.loader.load_module(spec.name)
  File "/home/djipey/informatique/python/ChemBrows/my_twit.py", line 13, in <module>
  File "/usr/lib/python3.5/importlib/_bootstrap.py", line 969, in _find_and_load
    return _find_and_load_unlocked(name, import_)
  File "/usr/lib/python3.5/importlib/_bootstrap.py", line 944, in _find_and_load_unlocked
    _call_with_frames_removed(import_, parent)
  File "/usr/lib/python3.5/importlib/_bootstrap.py", line 222, in _call_with_frames_removed
    return f(*args, **kwds)
  File "/usr/lib/python3.5/importlib/_bootstrap.py", line 969, in _find_and_load
    return _find_and_load_unlocked(name, import_)
  File "/usr/lib/python3.5/importlib/_bootstrap.py", line 958, in _find_and_load_unlocked
    module = _load_unlocked(spec)
  File "/usr/lib/python3.5/importlib/_bootstrap.py", line 664, in _load_unlocked
    return _load_backward_compatible(spec)
  File "/usr/lib/python3.5/importlib/_bootstrap.py", line 634, in _load_backward_compatible
    spec.loader.load_module(spec.name)
  File "/usr/lib/python3.5/site-packages/twitter/__init__.py", line 19, in <module>
  File "/usr/lib/python3.5/importlib/_bootstrap.py", line 969, in _find_and_load
    return _find_and_load_unlocked(name, import_)
  File "/usr/lib/python3.5/importlib/_bootstrap.py", line 958, in _find_and_load_unlocked
    module = _load_unlocked(spec)
  File "/usr/lib/python3.5/importlib/_bootstrap.py", line 664, in _load_unlocked
    return _load_backward_compatible(spec)
  File "/usr/lib/python3.5/importlib/_bootstrap.py", line 634, in _load_backward_compatible
    spec.loader.load_module(spec.name)
  File "/usr/lib/python3.5/site-packages/twitter/stream.py", line 13, in <module>
  File "/usr/lib/python3.5/importlib/_bootstrap.py", line 969, in _find_and_load
    return _find_and_load_unlocked(name, import_)
  File "/usr/lib/python3.5/importlib/_bootstrap.py", line 958, in _find_and_load_unlocked
    module = _load_unlocked(spec)
  File "/usr/lib/python3.5/importlib/_bootstrap.py", line 664, in _load_unlocked
    return _load_backward_compatible(spec)
  File "/usr/lib/python3.5/importlib/_bootstrap.py", line 634, in _load_backward_compatible
    spec.loader.load_module(spec.name)
  File "/usr/lib/python3.5/ssl.py", line 98, in <module>
    import _ssl             # if we can't import it, let the error propagate
  File "/usr/lib/python3.5/importlib/_bootstrap.py", line 969, in _find_and_load
    return _find_and_load_unlocked(name, import_)
  File "/usr/lib/python3.5/importlib/_bootstrap.py", line 958, in _find_and_load_unlocked
    module = _load_unlocked(spec)
  File "/usr/lib/python3.5/importlib/_bootstrap.py", line 666, in _load_unlocked
    module = module_from_spec(spec)
  File "/usr/lib/python3.5/importlib/_bootstrap.py", line 577, in module_from_spec
    module = spec.loader.create_module(spec)
  File "/usr/lib/python3.5/importlib/_bootstrap_external.py", line 903, in create_module
    _imp.create_dynamic, spec)
  File "/usr/lib/python3.5/importlib/_bootstrap.py", line 222, in _call_with_frames_removed
    return f(*args, **kwds)
ImportError: /home/ubuntu/Desktop/ChemBrows-0.9.6.linux-x86_64/ChemBrows-0.9.6.linux-x86_64/_ssl.cpython-35m-x86_64-linux-gnu.so: undefined symbol: SSLv2_method

经过一番挖掘,似乎openssl是在不支持版本2的情况下构建的,在Ubuntu上。我不明白的是程序崩溃的原因:由于所有库都与我的程序一起打包和交付,因此它不应该调用任何系统库。

总而言之,我真的不明白为什么我的程序崩溃了。任何帮助将不胜感激。

编辑:

在 Ubuntu 上安装启用了版本 2 的 openssl 后,它可以完美运行。但是这个过程相当漫长和困难,我不能要求我未来的用户这样做。所以我可能应该在没有 ssl v2 支持的情况下构建 python 3

您可以通过 pip 卸载 M2Crypto,然后安装软件包 python-m2crypto,然后确保再次安装 M2Crypto 来解决此问题

pip uninstall M2Crypto
apt-get install python-m2crypto
pip install M2Crypto

这为我解决了

最新更新