AttributeError: el módulo 'time' no tiene atributo 'clock' en Python 3.8

23

He escrito código para generar claves públicas y privadas. Funciona muy bien en Python 3.7 pero falla en Python 3.8. No sé cómo falla en la última versión. Ayúdame con algunas soluciones.

Aquí está el código:

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)

Error en la versión 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'
Smack Alpha
fuente
referenciado aquí en Crytpo lib: github.com/dlitz/pycrypto/issues/283 Pero el boleto parece no estar cerrado desde hace un año.
Fabien Antoine

Respuestas:

22

Del documento de Python 3.8 :

La función time.clock()se ha eliminado, después de haber quedado en desuso desde Python 3.3: utilizar time.perf_counter()o time.process_time(), en su lugar, según sus requisitos, tener un comportamiento bien definido. (Contribución de Matthias Bussonnier en bpo-36895 .)

Angus Tay
fuente
1

El módulo que utiliza para generar una llamada clave es un método que se ha depreciado desde python 3.3 time.clock () .

Puede cambiar a Python 3.7 o cambiar el código fuente para reemplazarlo. Deberías abrir un problema para eso también.

Florian Bernard
fuente
0
AttributeError: module 'time' has no attribute 'clock' 

Está en desuso como se dijo, lo que significa que solo debe usar las últimas versiones de las bibliotecas que tienen ese módulo. Por ejemplo, dependiendo de la dependencia que tenga, Eliminar e Instalar

Cripto == 1.4.1, o Mako == 1.1.2 o SQLAlchemy == 1.3.6 // etc.

La idea es que no tiene que degradar su versión de Python, ya que esto lo alcanzará más tarde. Simplemente actualice los paquetes a los más tardíos que sean compatibles con Python 3.8

joash
fuente