119 votes

AttributeError : le module 'time' n'a pas d'attribut 'clock' dans Python 3.8

J'ai écrit un code pour générer des clés publiques et privées. Il fonctionne très bien sous Python 3.7 mais échoue sous Python 3.8. Je ne sais pas comment il échoue dans la dernière version. Aidez-moi à trouver des solutions.

Voici le code :

from Crypto.PublicKey import RSA

def generate_keys():
    modulus_length = 1024
    key = RSA.generate(modulus_length)
    pub_key = key.publickey()
    private_key = key.exportKey()
    public_key = pub_key.exportKey()
    return private_key, public_key

a = generate_keys()
print(a)

Erreur dans la version Python 3.8 :

Traceback (most recent call last):
  File "temp.py", line 18, in <module>
    a = generate_keys()
  File "temp.py", line 8, in generate_keys
    key = RSA.generate(modulus_length)
  File "/home/paulsteven/.local/lib/python3.8/site-packages/Crypto/PublicKey/RSA.py", line 508, in generate
    obj = _RSA.generate_py(bits, rf, progress_func, e)    # TODO: Don't use legacy _RSA module
  File "/home/paulsteven/.local/lib/python3.8/site-packages/Crypto/PublicKey/_RSA.py", line 50, in generate_py
    p = pubkey.getStrongPrime(bits>>1, obj.e, 1e-12, randfunc)
  File "/home/paulsteven/.local/lib/python3.8/site-packages/Crypto/Util/number.py", line 282, in getStrongPrime
    X = getRandomRange (lower_bound, upper_bound, randfunc)
  File "/home/paulsteven/.local/lib/python3.8/site-packages/Crypto/Util/number.py", line 123, in getRandomRange
    value = getRandomInteger(bits, randfunc)
  File "/home/paulsteven/.local/lib/python3.8/site-packages/Crypto/Util/number.py", line 104, in getRandomInteger
    S = randfunc(N>>3)
  File "/home/paulsteven/.local/lib/python3.8/site-packages/Crypto/Random/_UserFriendlyRNG.py", line 202, in read
    return self._singleton.read(bytes)
  File "/home/paulsteven/.local/lib/python3.8/site-packages/Crypto/Random/_UserFriendlyRNG.py", line 178, in read
    return _UserFriendlyRNG.read(self, bytes)
  File "/home/paulsteven/.local/lib/python3.8/site-packages/Crypto/Random/_UserFriendlyRNG.py", line 129, in read
    self._ec.collect()
  File "/home/paulsteven/.local/lib/python3.8/site-packages/Crypto/Random/_UserFriendlyRNG.py", line 77, in collect
    t = time.clock()
AttributeError: module 'time' has no attribute 'clock'

4voto

joash Points 186
AttributeError: module 'time' has no attribute 'clock' 

Il est déprécié comme indiqué, ce qui signifie qu'il suffit d'utiliser les dernières versions des bibliothèques qui ont ce module. Par exemple, en fonction de la dépendance que vous avez, supprimez et installez

Crypto==1.4.1, ou Mako==1.1.2 ou SQLAlchemy==1.3.6 //etc

L'idée est que vous ne devez pas mettre à niveau votre version de python, car cela vous rattrapera plus tard. Il suffit de mettre à jour les paquets vers des versions plus récentes qui sont compatibles avec Python 3.8.

3voto

Florian Bernard Points 2399

Le module que vous utilisez pour générer la clé appelle une méthode qui a été dépréciée depuis python 3.3. time.clock() .

Vous pourriez rétrograder vers python 3.7 ou modifier le code source pour le remplacer. Vous devriez également ouvrir un dossier pour cela.

3voto

time.clock est utilisé dans de nombreuses bibliothèques anciennes. Maintenant que time.clock est supprimé, il faut cliquer sur le chemin indiqué dans l'erreur. Cela vous mènera à la ligne où time.clock est écrit, et il suffit de le changer en time.time .

1voto

MorariJan Points 35

J'ai eu le même problème pour crypter une chaîne en utilisant AES dans mon projet neehack.com et je l'ai résolu en mettant à jour venv/lib/python3.8/site-packages/Crypto/Random/_UserFriendlyRNG.py de la ligne 77 au t = time.time() et il est maintenant corrigé.

0voto

Si vous avez une base de données impliquée, mettez-la à niveau.

pip install --upgrade flask_sqlalchemy

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X