AttributeError: โมดูล 'time' ไม่มี attribute '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/issues/283แต่ดูเหมือนว่าตั๋วจะไม่ถูกปิดมานานนับปี
Fabien Antoine

คำตอบ:


22

จากPython 3.8 doc :

ฟังก์ชั่นtime.clock()ถูกลบออกหลังจากเลิกใช้งานตั้งแต่ Python 3.3: ใช้งานtime.perf_counter()หรือไม่time.process_time()ก็ขึ้นอยู่กับความต้องการของคุณเพื่อให้มีพฤติกรรมที่ชัดเจน (มีส่วนร่วมโดย Matthias Bussonnier ในbpo-36895 )


1

โมดูลที่คุณใช้ในการสร้างการเรียกที่สำคัญวิธีการที่ได้รับการตัดค่าเสื่อมราคาตั้งแต่หลาม 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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.