AttributionError: mô-đun 'thời gian' không có thuộc tính 'đồng hồ' trong Python 3.8


23

Tôi đã viết mã để tạo khóa công khai và khóa riêng. Nó hoạt động rất tốt ở Python 3.7 nhưng thất bại trong Python 3.8. Tôi không biết làm thế nào nó thất bại trong phiên bản mới nhất. Giúp tôi với một số giải pháp.

Đây là Mã:

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)

Lỗi trong phiên bả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'

được tham chiếu ở đây trong libtpo lib: github.com/dlitz/pycrypto/issues/283 Nhưng vé dường như không bị đóng kể từ một năm.
Fabien Antoine

Câu trả lời:


22

Từ tài liệu Python 3.8 :

Hàm time.clock()đã bị xóa, sau khi không được dùng nữa kể từ Python 3.3: sử dụng time.perf_counter()hoặc time.process_time()thay vào đó, tùy thuộc vào yêu cầu của bạn, để có hành vi được xác định rõ. (Được đóng góp bởi Matthias Bussonnier trong bpo-36895 .)


1

Mô-đun bạn sử dụng để tạo khóa gọi một phương thức đã bị khấu hao kể từ python 3.3 time.clock () .

Bạn có thể hạ cấp xuống python 3.7 hoặc thay đổi mã nguồn để thay thế nó. Bạn nên mở một vấn đề cho điều đó là tốt.


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

Nó không được dùng như đã nói có nghĩa là chỉ sử dụng các phiên bản mới nhất của thư viện có mô-đun đó. Ví dụ, tùy thuộc vào sự phụ thuộc mà bạn có, Xóa và Cài đặt

Tiền điện tử == 1.4.1 hoặc Mako == 1.1.2 hoặc SQLAlchemy == 1.3.6 // vv

Ý tưởng là bạn không cần phải hạ cấp phiên bản python của mình vì điều này sẽ bắt kịp với bạn sau này. Chỉ cần cập nhật các gói lên các gói muộn hơn tương thích với Python 3.8

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.