【问题标题】:How do I know if mpmath is using gmpy or gmpy2?我如何知道 mpmath 使用的是 gmpy 还是 gmpy2?
【发布时间】:2014-12-20 13:17:39
【问题描述】:

我知道

import mpmath as mp
print mp.libmp.BACKEND

但如果我没记错的话,它不会说我使用的是 gmpy 还是 gmpy2。

另外,我每次你使用新版本的东西时,你都不会得到它旁边的版本号,但是因为我可以分别import gmpygmpy2 我有点担心我可能会使用旧版本的 gmpy。

谢谢

更新:

我还尝试了以下让我感到困惑/担心的方法。

import mpmath as mp
import gmpy as gm
import gmpy2 as gm2
print mp.mpf('1') == gm.mpf('1')
# Result is FALSE
print mp.mpf('1') == gm2.mpfr('1')
# Result is FALSE
print gm.mpf('1') == gm2.mpfr('1')
# Result is FALSE
print mp.mpf('1') == 1
# Result is TRUE
print gm.mpf('1') == 1
# Result is TRUE
print gm2.mpfr('1') == 1
# Result is TRUE

什么鬼?

【问题讨论】:

    标签: python mpmath gmpy


    【解决方案1】:

    mpmath 将首先尝试导入gmpy2

    虽然您可以同时导入gmpygmpy2,但由于gmpygmpy2 彼此不了解,因此不支持这种情况。

    我同时维护gmpygmpy2,但我认为gmpy 已过时,应该改用gmpy2

    【讨论】:

    • 所以我想这两者中的哪一个已经被导入了,所以我想没有办法知道吧?
    • 并非如此。如果您的系统上同时安装了两者,则将使用gmpy2
    【解决方案2】:

    我很确定这是可能的,因为 python 将它导入的所有模块记录在字典中。如果你这样做,你可以看到它

       import sys
       print(sys.modules)
    

    这是一个字典,它允许它查看它以前是否导入了一个模块,因此当它看到import 语句时不必再次执行此操作。例如,在我的代码中,我在很多地方都有import numpy as np,因为这些地方中的任何一个都可能是python第一次被要求导入它。但是导入需要很长时间,因此 python 不想每次看到该语句时都这样做。如果numpysys.modules 中,它只是假设它已经知道它需要知道的内容并跳过它。

    所以要回答您的问题,请执行以下操作:

    import mpmath
    import sys
    'gmpy2' in sys.modules.keys()
    

    如果你得到True,你在某处使用gmpy2。如果mpmathsys 是您导入的唯一内容,则可以安全地假设mpmath 是使用gmpy2 的内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-11
      • 2011-05-29
      • 2011-05-08
      相关资源
      最近更新 更多