如何判断mpmath使用的是gmpy还是gmpy2?
我知道有这个
import mpmath as mp
print mp.libmp.BACKEND
但如果我没记错的话,它不会告诉我我是在用 gmpy 还是 gmpy2。
另外,我知道每次使用新版本的东西时,旁边不会显示版本号,但因为我可以分别 import gmpy
和 gmpy2
,所以我有点担心我可能在用旧版的 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
。如果你只导入了mpmath
和sys
,那么可以安全地假设是mpmath
在使用gmpy2
。
12
mpmath
会先尝试导入 gmpy2
。
虽然你可以同时导入 gmpy
和 gmpy2
,但这种做法并不被推荐,因为 gmpy
和 gmpy2
之间并不了解对方。
我同时维护 gmpy
和 gmpy2
,但我认为 gmpy
已经过时了,应该使用 gmpy2
。