Ошибка импорта hashlib с python 2.7, но не с 2.6

Я на Solaris 10 (x86).

До сих пор я использовал python2.6. Сегодня я установил python2.7, и у меня возникла странная ошибка при импорте hashlib на 2.7, но не на 2.6:

Python 2.6:

[email protected] [PROD] # python2.6 -c "import hashlib"
[email protected] [PROD] # 

Python 2.7:

[email protected] [PROD] # python2.7 -c "import hashlib"
ERROR:root:code for hash md5 was not found.
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/hashlib.py", line 139, in <module>
    globals()[__func_name] = __get_hash(__func_name)
  File "/usr/local/lib/python2.7/hashlib.py", line 91, in __get_builtin_constructor
    raise ValueError('unsupported hash type ' + name)
ValueError: unsupported hash type md5
ERROR:root:code for hash sha1 was not found.
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/hashlib.py", line 139, in <module>
    globals()[__func_name] = __get_hash(__func_name)
  File "/usr/local/lib/python2.7/hashlib.py", line 91, in __get_builtin_constructor
    raise ValueError('unsupported hash type ' + name)
ValueError: unsupported hash type sha1
ERROR:root:code for hash sha224 was not found.
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/hashlib.py", line 139, in <module>
    globals()[__func_name] = __get_hash(__func_name)
  File "/usr/local/lib/python2.7/hashlib.py", line 91, in __get_builtin_constructor
    raise ValueError('unsupported hash type ' + name)
ValueError: unsupported hash type sha224
ERROR:root:code for hash sha256 was not found.
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/hashlib.py", line 139, in <module>
    globals()[__func_name] = __get_hash(__func_name)
  File "/usr/local/lib/python2.7/hashlib.py", line 91, in __get_builtin_constructor
    raise ValueError('unsupported hash type ' + name)
ValueError: unsupported hash type sha256
ERROR:root:code for hash sha384 was not found.
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/hashlib.py", line 139, in <module>
    globals()[__func_name] = __get_hash(__func_name)
  File "/usr/local/lib/python2.7/hashlib.py", line 91, in __get_builtin_constructor
    raise ValueError('unsupported hash type ' + name)
ValueError: unsupported hash type sha384
ERROR:root:code for hash sha512 was not found.
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/hashlib.py", line 139, in <module>
    globals()[__func_name] = __get_hash(__func_name)
  File "/usr/local/lib/python2.7/hashlib.py", line 91, in __get_builtin_constructor
    raise ValueError('unsupported hash type ' + name)
ValueError: unsupported hash type sha512

Я не понимаю, почему у меня есть эта ошибка, так как я пытаюсь импортировать на ту же машину.

Заранее благодарим за помощь!

Ответы

Ответ 1

Пакет python2.7 зависит от пакета libssl1_0_0 (opensral_1.0 librairies runtime).

Я установил его и добавил каталог /usr/local/ssl/lib в переменную окружения $LD_LIBRARY_PATH.

И теперь он отлично работает!:)

Ответ 2

Вы можете использовать команду ниже и проверить, какие библиотеки отсутствуют,

ldd /path/to/Python-Library/_hashlibmodule.so

например

ldd /usr/local/lib/python2.7/_hashlibmodule.so

Если вы получаете вывод, как показано ниже, это означает, что вам не хватает необходимых библиотек openssl

    linux-vdso.so.1 =>  (0x00007fffd6f6a000)
    libssl.so.6 => not found
    libcrypto.so.6 => not found
    libpython2.7.so.1.0 => /lib64/libpython2.7.so.1.0 (0x00007ffb18b54000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00007ffb18937000)
    libc.so.6 => /lib64/libc.so.6 (0x00007ffb185a2000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00007ffb1839e000)
    libutil.so.1 => /lib64/libutil.so.1 (0x00007ffb1819b000)
    libm.so.6 => /lib64/libm.so.6 (0x00007ffb17f16000)
    /lib64/ld-linux-x86-64.so.2 (0x0000003e0a000000)

Ответ 3

та же ошибка для меня. Мое дело было скопировано virtenv, давая мне эту ошибку на новом сервере. Работает python по умолчанию.

Я использовал

python2.7 -v -c "import hashlib" 2> output.txt

вы должны увидеть что-то вроде этой строки ниже в output.txt:

import hashlib # precompiled from hashlib.pyc
dlopen("/path/to/virtenv/lib/python2.7/lib-dynload/_hashlib.so", 2);

ldd /path/to/virtenv/lib/python2.7/lib-dynload/_hashlib.so
...
   libssl.so.0.9.8 => not found
   libcrypto.so.0.9.8 => not found
...

Так что я сделал просто:

cp /usr/lib/python2.7/lib-dynload/_hashlib.so /*path-to-virtenv*/manager/lib/python2.7/lib-dynload/_hashlib.so