web-dev-qa-db-ja.com

AttributeError:モジュール 'time'に属性 'clock'がありませんPython 3.8

公開鍵と秘密鍵を生成するコードを書きました。 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'
18
user11576444

Python 3.8 doc から:

関数time.clock()は、Python 3.3以降廃止されたため削除されました。必要に応じて、代わりにtime.perf_counter()またはtime.process_time()を使用してください。 -定義された動作。 (Matthias Bussonnierによって bpo-36895 で提供されています。)

16
Angus Tay

キーの生成に使用するモジュールは、python 3.3 time.clock() 以降廃止されたメソッドを呼び出します。

python 3.7にダウングレードするか、ソースコードを変更して置き換えることができます。そのために問題も開く必要があります。

1
Florian Bernard
AttributeError: module 'time' has no attribute 'clock' 

上記のように非推奨になりました。つまり、そのモジュールを含むライブラリの最新バージョンを使用するだけです。たとえば、依存関係に応じて、削除してインストールします

Crypto == 1.4.1、またはMako == 1.1.2またはSQLAlchemy == 1.3.6 // etc

pythonバージョンは後で追いつくので、バージョンをダウングレードする必要はありません。Python 3.8

0
joash