AttributeError: модуль 'time' не має атрибута 'clock' в Python 3.8


23

Я написав код для створення публічних та приватних ключів. Він чудово працює на Python 3.7, але не в програмі Python 3.8. Я не знаю, як це виходить з ладу в останній версії. Допоможіть мені з деякими рішеннями.

Ось код:

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)

Помилка у версії 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'

на яке посилається тут, у Crytpo lib: github.com/dlitz/pycrypto/isissue/283 Але квиток, здається, не закритий вже цілий рік.
Фаб'єн Антуан

Відповіді:


22

З Python 3.8 doc :

Функція time.clock()була видалена, після того як вона була знята з Python 3.3: використовуйте time.perf_counter()або time.process_time()замість цього, залежно від ваших вимог, мати чітко визначену поведінку. (Доповідь Маттіаса Буссоньє в bpo-36895 .)


1

Модуль, який ви використовуєте для генерації виклику ключа, є методом, який амортизується після python 3.3 time.clock () .

Ви можете перейти на python 3.7 або змінити вихідний код, щоб замінити його. Ви також повинні відкрити питання для цього.


0
AttributeError: module 'time' has no attribute 'clock' 

Як сказано, це застаріло, а це означає просто використовувати останні версії бібліотек, у яких є цей модуль. Наприклад, залежно від залежності, яку ви маєте, Видаліть та встановіть

Crypto == 1.4.1, або Mako == 1.1.2 або SQLAlchemy == 1.3.6 // тощо

Ідея полягає в тому, що вам не доведеться знижувати версію python, оскільки це пізніше наздожене вас. Просто оновіть пакети на більш пізні пакети, сумісні з Python 3.8

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.