2

我知道

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

有没有搞错?

4

2 回答 2

8

mpmath将尝试先导入gmpy2

虽然您可以同时导入两者gmpygmpy2但它不是受支持的方案,因为gmpy彼此gmpy2不知道。

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

于 2014-10-24T17:19:51.967 回答
1

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

   import sys
   print(sys.modules)

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

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

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

如果你得到True,你在gmpy2某处使用。如果mpmath并且sys是您唯一导入的东西,那么可以安全地假设它mpmath是使用gmpy2.

于 2017-11-20T14:33:27.687 回答