服务器更新后找不到HashLib模块

4
我在我们的Dreamhost服务器上运行Python脚本。我们的Python脚本使用Python 2.7 - 我们进行了自定义安装,因为Dreamhost使用Python 2.6。一切正常运行了1年。
昨天,Dreamhost进行了服务器更新,现在我们的脚本无法找到一个特定的模块 - MD5。当我们执行import hashlib时,脚本输出以下错误。
我需要做什么来纠正这个问题?
- 我应该重新安装Python 2.7吗? - 我应该重新安装Pip和Easy_Install吗? - 我应该重新安装VirtualEnv吗? - 还有其他建议吗?
所有Python脚本的错误:
/home/user/script.py in () 
  import hashlib  
  hashlib undefined    

/home/user/python/lib/python2.7/hashlib.py in ()  
    # version not supporting that algorithm.  
    try:  
        globals()[__func_name] = __get_hash(__func_name)  
    except ValueError:  
        import logging builtin globals = <built-in function globals, __func_name = 'md5', __get_hash = <function __get_builtin_constructor  /home/user/python/lib/python2.7/hashlib.py in __get_builtin_constructor(name='md5')  
        return _sha.new  
    elif name in ('MD5', 'md5'):  
        import _md5  
         return _md5.new  
     elif name in ('SHA256', 'sha256', 'SHA224', 'sha224'):  
 _md5 undefined  

<type 'exceptions.ImportError': No module named _md5  
   args = ('No module named _md5',)  
   message = 'No module named _md5' 

很可能是libssl被更新了,可能会导致一些引用断裂。运行“ldd /path/to/your/python2.7”来查看它是否正确链接到libssl。不过,你应该首先尝试重新安装python2.7。或者检查dreamhost现在使用的基本系统是否已经包含了python2.7。 - metatoaster
1个回答

5
我遇到了完全相同的问题。我在自己的虚拟环境中运行Python 2.7。 我正在尝试避免重新安装Python并运行Django 1.7应用程序。
以下方法适用于我。
步骤1.(这一步可能不是必要的)
我卸载了pythonbrew,因为它在这里说:http://wiki.dreamhost.com/Python pythonbrew已被弃用。 如果你从头开始做这个,pyenv是一个好的选择,但你不需要重新安装 virtualenv等。只需先摆脱pythonbrew即可。
$ rm -Rf ~/.pythonbrew

移除了 .bashrc 中对 pythonbrew 的引用。

步骤 2。

无需重新安装 virtualenv。只需创建一个新的虚拟环境即可。

$~/env> virtualenv myNewEnvironment
$~/env/myNewEnvironment/bin> source activate
$ pip freeze

你现在有一个干净的板子,从头开始重新构建依赖关系。至少解决了“import hashlib”问题。这为您提供了一个干净的Python版本,并正确链接到新的Ubuntu操作系统。

(myNewEnvironment):~> which python
~/env/myNewEnvironment/bin/python
(myNewEnvironment):~> python
Python 2.7.3 (default, Feb 27 2014, 19:58:35)  
[GCC 4.6.3] on linux2
installed on Ubuntu 12.04 (which is the new OS)

验证:

导入hashlib不应该出现错误。

步骤3。

pip install Django
pip install MySQL-python

最好完成/重新检查列出的其余步骤,例如http://wiki.dreamhost.com/Django (或适用于您的框架的适当维基页面)以确保更安全。

现在这样可以让我的网站上线运行,但是有一个警告我现在忽略了,直到我弄清楚更多内容为止: 您有未应用的迁移;在应用它们之前,您的应用可能无法正常工作。 运行'python manage.py migrate'来应用它们。

祝好运!


1
我要补充一点,对于我来说,virtualenv本身也会出现md5错误,直到我从路径中删除了自定义的Python。 - clearf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接