我怎么知道mpmath是使用gmpy还是gmpy2?

时间:2014-10-24 16:37:02

标签: python mpmath gmpy

我知道

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

到底是什么?

2 个答案:

答案 0 :(得分:8)

mpmath会先尝试导入gmpy2

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

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

答案 1 :(得分:0)

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

   import sys
   print(sys.modules)

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

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

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

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