如何判断mpmath使用的是gmpy还是gmpy2?

3 投票
2 回答
1602 浏览
提问于 2025-04-29 12:07

我知道有这个

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 个回答

3

我很确定这是可能的,因为Python会把它导入的所有模块记录在一个字典里。你可以通过以下方式查看:

   import sys
   print(sys.modules)

这个字典让Python能够检查它之前是否已经导入过某个模块,这样当它看到一个import语句时,就不需要再导入一次。例如,在我的代码中,我在很多地方都有import numpy as np,因为这些地方中的任何一个都可能是Python第一次被要求导入这个模块。但是导入的过程比较耗时,所以Python不想每次看到这个语句都去执行。如果numpy已经在sys.modules里,它就会假设自己已经知道需要知道的内容,然后跳过这个导入。

所以,针对你的问题,你可以这样做:

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

如果你得到True,那说明你在某个地方使用了gmpy2。如果你只导入了mpmathsys,那么可以安全地假设是mpmath在使用gmpy2

12

mpmath 会先尝试导入 gmpy2

虽然你可以同时导入 gmpygmpy2,但这种做法并不被推荐,因为 gmpygmpy2 之间并不了解对方。

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

撰写回答