python2.7.2でmd5をimportできない
IntelSolaris10上でpython2.7.2をmake。virtualenvを作成しようとすると、なにやらmd5とかshaとかが使えないとかなんとかエラーを吐いた。
確認のため、シェルから起動してmd5をインポートしてみるとこんなエラー。
$ /usr/local/python_v272/bin/python Python 2.7.2 (default, Jul 28 2011, 14:46:57) [GCC 4.6.1] on sunos5 Type "help", "copyright", "credits" or "license" for more information. >>> import md5 ERROR:root:code for hash md5 was not found. Traceback (most recent call last): File "/usr/local/python_v271/lib/python2.7/hashlib.py", line 139, in <module> globals()[__func_name] = __get_hash(__func_name) File "/usr/local/python_v271/lib/python2.7/hashlib.py", line 91, in __get_builtin_constructor raise ValueError('unsupported hash type %s' % name) ValueError: unsupported hash type md5 ERROR:root:code for hash sha1 was not found. Traceback (most recent call last): File "/usr/local/python_v271/lib/python2.7/hashlib.py", line 139, in <module> globals()[__func_name] = __get_hash(__func_name) File "/usr/local/python_v271/lib/python2.7/hashlib.py", line 91, in __get_builtin_constructor raise ValueError('unsupported hash type %s' % name) ValueError: unsupported hash type sha1 ERROR:root:code for hash sha224 was not found. Traceback (most recent call last): File "/usr/local/python_v271/lib/python2.7/hashlib.py", line 139, in <module> globals()[__func_name] = __get_hash(__func_name) File "/usr/local/python_v271/lib/python2.7/hashlib.py", line 91, in __get_builtin_constructor raise ValueError('unsupported hash type %s' % name) ValueError: unsupported hash type sha224 ERROR:root:code for hash sha256 was not found. Traceback (most recent call last): File "/usr/local/python_v271/lib/python2.7/hashlib.py", line 139, in <module> globals()[__func_name] = __get_hash(__func_name) File "/usr/local/python_v271/lib/python2.7/hashlib.py", line 91, in __get_builtin_constructor raise ValueError('unsupported hash type %s' % name) ValueError: unsupported hash type sha256 ERROR:root:code for hash sha384 was not found. Traceback (most recent call last): File "/usr/local/python_v271/lib/python2.7/hashlib.py", line 139, in <module> globals()[__func_name] = __get_hash(__func_name) File "/usr/local/python_v271/lib/python2.7/hashlib.py", line 91, in __get_builtin_constructor raise ValueError('unsupported hash type %s' % name) ValueError: unsupported hash type sha384 ERROR:root:code for hash sha512 was not found. Traceback (most recent call last): File "/usr/local/python_v271/lib/python2.7/hashlib.py", line 139, in <module> globals()[__func_name] = __get_hash(__func_name) File "/usr/local/python_v271/lib/python2.7/hashlib.py", line 91, in __get_builtin_constructor raise ValueError('unsupported hash type %s' % name) ValueError: unsupported hash type sha512 Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/local/python_v271/lib/python2.7/md5.py", line 10, in <module> from hashlib import md5 ImportError: cannot import name md5
どうしたことだ。
Google先生で検索してみたところ、どうもOpenSSLとの整合性とかなんとか。md5とかshaとかのダイジェストを作るときにOpenSSLのライブラリ参照するからかな。
ライブラリ(libssl.soとかlibcrypt.soとか)を見えるところに置いてみたり、LD_LIBRARY_PATHを変更してみたりしてもだめ。
そういえば、OpenSSLはシステムデフォルトに入っているものと、あとでソースからコンパイルしたものの両方が入っていたことに気づく。LD_LIBRARY_PATHのデフォルトだと/usr/sfw/lib/64のものを参照しているみたい。ん?64?
そうか、64bitモードじゃないとだめか。
以下のようにしてconfigure,make。
$ export CC='/usr/local/bin/gcc -m64' $ ./configure --enable-unicode --prefix=/usr/local/python_v271 (略) $ /usr/local/bin/make # /usr/local/bin/make install $ /usr/local/python_v271/bin/python Python 2.7.2 (default, Jul 29 2011, 14:17:41) [GCC 4.6.1] on sunos5 Type "help", "copyright", "credits" or "license" for more information. >>> import md5 >>>
をを、うまくいきました。ライブラリを参照するときに32bitでみていたんだな。それくらいのエラーメッセージだしてくれればよかったのに。