10

我需要你的帮助,

如何纠正错误 AttributeError:“模块”对象没有属性“sha1”,

当我启动命令示例 import random 或 import hashlib 我得到这样的结果

root@thinkad:~# python
Python 2.7.3 (default, Jan  2 2013, 13:56:14) 
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import random
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/random.py", line 49, in <module>
    import hashlib as _hashlib
  File "hashlib.py", line 3, in <module>
    hasher = hashlib.sha1()
AttributeError: 'module' object has no attribute 'sha1'
>>> import math
>>> import hashlib
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "hashlib.py", line 3, in <module>
    hasher = hashlib.sha1()
AttributeError: 'module' object has no attribute 'sha1'
>>> 
4

4 回答 4

27

安装一些经过定期清理的 brew cask 后出现问题。然后 node-gyp 无法为我的节点应用程序重建一些包。重新安装 python 2 帮助了我。

在 macOS 上:

brew reinstall python@2
于 2019-11-25T20:52:25.917 回答
2

错误原因

当您在执行脚本的同一目录中有一个文件(或者即使它是正在运行的脚本本身) ,其名称与内置模块相同,则会加载它而不是内置模块。

使固定

要修复它,您只需将文件重命名hashlib.py为其他名称,然后 Python 解释器将加载内置模块。您可能还需要删除与hashlib.pyc您位于同一目录中的已编译模块hashlib.py,否则 Python 仍将加载该模块。

解释

当您import使用模块时,假设Python在以下位置并按以下顺序import hashlib查找模块:hashlib.py

  1. 包含正在运行的脚本的目录
  2. 内置模块
  3. 包含输入脚本的目录(或未指定文件时的当前目录)
  4. PYTHONPATH环境变量(可能包含目录列表)
  5. 安装相关的默认路径

这意味着如果您执行hashlib.py包含该语句import hashlib的脚本,Python 会导入脚本本身而不是内置模块hashlib。实际上,Python 会将您的脚本编译到hashlib.pyc同一目录中的文件中并导入该编译后的脚本,因此如果您只是重命名hashlib.py并离开haslib.pyc它所在的位置,它仍然会加载它。因此,您还需要删除haslib.pyc.

于 2016-05-27T12:58:17.950 回答
0

看起来您有一个名为的文件hashlib.py妨碍了解释器查找标准hashlib模块。

于 2014-03-02T20:50:07.893 回答
0

在更新软件包后,我在 anaconda 环境中遇到了同样的错误,该软件包也引入了新的 python 版本。在我的情况下,aconda remove python后跟一个conda install python=2.7固定的 this。

于 2015-01-23T19:12:34.397 回答