Il problema è apparso dopo l'installazione di una botte di birra che ha effettuato una pulizia regolare dopo. Quindi node-gyp non riusciva a ricostruire alcuni pacchetti per la mia applicazione node. La reinstallazione di Python 2 mi ha aiutato.
Su macos:
brew reinstall [email protected]
Causa dell'errore
Quando hai un file nella stessa directory da dove hai eseguito lo script (o anche se è lo script stesso che viene eseguito) con lo stesso nome di un modulo integrato , viene caricato al posto del modulo integrato.
Correggi
Per risolverlo devi semplicemente rinominare il tuo file hashlib.py
a qualcos'altro e quindi l'interprete Python caricherà il modulo integrato. Potrebbe anche essere necessario eliminare il modulo compilato hashlib.pyc
che si trova nella stessa directory del tuo hashlib.py
, altrimenti Python caricherà ancora quel modulo.
Spiegazione
Quando fai import
un modulo, diciamo import hashlib
, Python cerca il modulo hashlib.py
nelle seguenti posizioni e nel seguente ordine:
- directory contenente lo script in esecuzione
- moduli integrati
- directory contenente lo script di input (o la directory corrente quando non è specificato alcun file)
PYTHONPATH
variabile d'ambiente (può contenere un elenco di directory)- percorso predefinito dipendente dall'installazione
Ciò significa che se esegui lo script hashlib.py
che contiene l'istruzione import hashlib
, Python importa lo script stesso invece del modulo integrato hashlib
. Infatti, Python compila il tuo script nel file hashlib.pyc
nella stessa directory e importa quello script compilato, quindi se rinomini semplicemente hashlib.py
e lasciare haslib.pyc
dov'è, lo starà ancora caricando. Pertanto è necessario eliminare anche il haslib.pyc
.