AttributeError:模块“时间”在Python 3.8中没有属性“时钟”

时间:2019-10-26 08:51:54

标签: python attributeerror pycrypto 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'

11 个答案:

答案 0 :(得分:20)

@android:drawable/在3.8中被删除 ,因为它具有platform-dependent behavior

  • Unix 上,它返回当前的处理器时间(以秒为单位)

  • Windows 上,它返回时钟时间(以秒为单位)

    @drawable/

那要选择哪个函数呢?

  • 处理器时间:这是该特定进程在CPU上有效执行所花费的时间。睡眠,等待Web请求或仅执行其他进程的时间都不会造成这种情况。

    • 使用time.clock()
  • 墙壁时钟时间:这是指“挂在墙上的时钟上”经过的时间,即实时时间。

    • 使用# I ran this test on my dual-boot system as demonstration: print(time.clock()); time.sleep(10); print(time.clock()) # Linux: # Windows: # 0.0382 # 26.1224 # 0.0384 # 36.1566

      • time.process_time()还可测量挂钟时间,但可以重置,因此您可以返回上一时间
      • time.perf_counter()无法重设(单调=只能向前移动),但精度低于time.time()

答案 1 :(得分:18)

检查您是否正在使用PyCrypto,如果是,则将其卸载并安装PyCryptodome,它是PyCrypto的分支

PyCrypto已死,如project issue page

所述

由于这两个库可以共存,所以也可能是一个问题

pip3 uninstall PyCrypto
pip3 install -U PyCryptodome

答案 2 :(得分:8)

来自Python 3.8 doc

  

从Python 3.3开始不推荐使用的功能time.clock()已被删除:根据您的要求,改用time.perf_counter()time.process_time()具有明确的行为。 (由Matthias Bussonnier在bpo-36895中贡献。)

答案 3 :(得分:3)

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

它已被弃用,这意味着仅使用具有该模块的最新版本的库。例如,根据您所拥有的依赖性,删除并安装

Crypto == 1.4.1,或Mako == 1.1.2或SQLAlchemy == 1.3.6 // etc

这个想法是您不必降级python版本,因为以后会跟上您的脚步。只需将软件包更新为与Python 3.8兼容的最新软件包

答案 4 :(得分:3)

原因:time.clock 已弃用

解决方案:

第 1 步 -

  • 只需转到您的 C 文件夹,然后在搜索栏中搜索 site-packages。你会看到这样的结果。

site-packages

  • 右键点击这个标记为红色的结果,然后打开文件位置

  • 然后查找 sqlalchemy/util/compat.py 文件并打开它。并使用 ctrl+f 搜索 time.clock 并将其替换为 time.time

第 2 步 -

  • 转到您的错误最后一行并转到该目录并打开该特定文件。
  • 使用 ctrl+f 搜索 time.clock 并将其替换为 time.time

希望对您有所帮助。点赞。快乐编码。

答案 5 :(得分:1)

time.clock 用于许多旧库中。 现在 time.clock 已删除,必须单击错误中给出的路径。 这会将您导航到写入 time.clock 的行,并将其更改为 time.time

答案 6 :(得分:0)

用于生成键调用的模块,此方法自python 3.3 time.clock()起已弃用。

您可以降级到python 3.7或更改源代码以替换它。您也应该为此打开一个问题。

答案 7 :(得分:0)

转到代码C:\ Users \ Mr \ anaconda3 \ envs \ pythonProject2 \ Lib \ site-packages \ sqlalchemy \ util,然后选择compat.py并在代码中搜索total = 0 count = 0 average = 0 lst = [] while True: inp = input("Enter number: ") try: if inp == "done": break value = float(inp) total = total + value count = count + 1 average = total / count except ValueError: print("Invalid Input") print(total, count, average)

然后将time.clock替换为time.clock并保存。

答案 8 :(得分:0)

在我的项目neehack.com中,使用AES加密字符串存在相同的问题,我通过将venv/lib/python3.8/site-packages/Crypto/Random/_UserFriendlyRNG.py第77行更新为t = time.time()进行了修复,现在已修复。

答案 9 :(得分:0)

如果涉及到数据库,请升级它。

pip install --upgrade flask_sqlalchemy

答案 10 :(得分:0)

打开文件并转到错误信息中指出的行,将time.clock()行更改为time.perf_counter(),如果仍然不起作用将其修改为time.time