i need your help,
How to correct an error AttributeError: 'module' object has no attribute 'sha1',
When I start the command example import random or import hashlib I get such a result
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'
>>>
The problem appeared after installing some brew cask that did some regular cleanup after. Then node-gyp was failing to rebuild some packages for my node application. Reinstalling python 2 helped me.
On macos:
brew reinstall python@2
When you have a file in the same directory from where you executed the script (or even if it's the script being run itself) named the same as a built-in module, it's loaded instead of the built-in module.
To fix it you simply need to rename your file hashlib.py
to something else and then the Python interpreter will load the built-in module. You may also need to delete the compiled module hashlib.pyc
which is located in the same directory as your hashlib.py
, otherwise Python will be still loading that module.
When you import
a module, let's say import hashlib
, Python looks for the module hashlib.py
in the following locations and in the following order:
PYTHONPATH
environment variable (may contain a list of directories)That means if you execute the script hashlib.py
which contains the statement import hashlib
, Python imports the script itself instead of built-in module hashlib
. In fact, Python compiles your script into the file hashlib.pyc
in the same directory and imports that compiled script, so if you just rename hashlib.py
and leave haslib.pyc
where it is, it will be still loading it. Therefore you also need to delete the haslib.pyc
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With