使用 CentOS 6.4 在 Python 2.7 上修复“警告:未找到 GMP 或 MPIR 库;未构建 Crypto.PublickKey._fastmath”错误

Posted

技术标签:

【中文标题】使用 CentOS 6.4 在 Python 2.7 上修复“警告:未找到 GMP 或 MPIR 库;未构建 Crypto.PublickKey._fastmath”错误【英文标题】:Fixing "warning: GMP or MPIR library not found; Not building Crypto.PublickKey._fastmath" error on Python 2.7 with CentOS 6.4 【发布时间】:2013-06-23 12:44:36 【问题描述】:

我正在使用 Python 2.7(通过 PythonBrew 脚本安装)运行 CentOS 6.4 服务器

我通过 'yum install gmp' 安装了 gmp 和通过'yum install python-devel'安装的python-devel(但它适用于python 2.6系列)

我正在尝试在我的服务器上安装 pycrypto,但它给了我

warning: GMP or MPIR library not found; Not building Crypto.PublickKey._fastmath

有什么方法可以让 pip '识别'我的 gmp 安装?

谢谢:D

【问题讨论】:

【参考方案1】:

您可能还需要安装 gmp-devel。这为 pycrypto 提供了使用 libgmp 构建所需的标头。

在 Ubuntu 上,我只安装了 libgmp10。我在尝试安装 pycrypto 时遇到了同样的警告。安装 Ubuntu 软件包 libgmp-dev 后,警告消失了,构建脚本表明它正在使用 _fastmath 扩展。

如果您已经安装了没有 _fastmath 的 pycrypto,您可以使用 -I 标志重新安装它,例如

sudo pip install -I pycrypto

【讨论】:

【参考方案2】:

这是我刚刚在我的 CentOS 服务器上编写的一步一步(序列假设你不是 root):

LIBGMP 安装

首先,在您的主目录中的某个位置设置并安装 libgmp,如下所示:

./configure prefix=$HOME
make
make install prefix=$HOME

这将创建一个 ~/lib、一个 ~/include 和一个 ~/share 目录(如果尚不存在)。

然后,将以下行添加到您的 .bashrc:

export LD_LIBRARY_PATH=$HOME/lib:/usr/local/lib:$LD_LIBRARY_PATH

执行“.~/.bashrc”来强制执行您的更改。

PYCRYPTO 构建和安装

我们需要手动处理安装过程。 首先,我们可以如下下载pycrypto:

进入存储源的目录:

cd ~/src

下载 pycrypto 源存档:

curl -o pycrypto.tar.gz "https://pypi.python.org/packages/source/p/pycrypto/pycrypto-2.6.tar.gz#md5=88dad0a270d1fe83a39e0467a66a22bb"

解压缩 + 解压缩存档:

gunzip pycrypto.tar.gz tar xvf pycrypto.tar

那我们需要“稍微”欺骗一下配置:

cd pycrypto-26
./configure --includedir=$HOME/include

编辑文件 cd src/config.h 并修改 定义:

#define HAVE_DECL_MPZ_POWM 0 而不是 1

#define HAVE_DECL_MPZ_POWM_SEC 1 而不是 0

#define HAVE_LIBGMP 1 而不是 0

然后通过搜索关键字“_fastmath”来编辑 setup.py 文件 并确保 Extension() 声明如下所示:

Extension("Crypto.PublicKey._fastmath",
          include_dirs=['/home/<yourhome>/include','src/','/usr/include/'],
          library_dirs=['/home/<yourhome>/lib'],
          libraries=['gmp'],
          sources=["src/_fastmath.c"]),

最后,构建 pycrypto:

python setup.py build

您应该在跟踪中的某处看到以下行:

...
building 'Crypto.PublicKey._fastmath' extension
...

然后您可以执行“python setup.py install”,或者,如果您像我一样喜欢 pip:

cd ..
pip install ./pycrypto-2.6

那么在 python 中执行以下行时应该不会出错:

>>> from Crypto.PublicKey import _fastmath
>>> import Crypto.Random
>>> _fastmath.HAVE_DECL_MPZ_POWM_SEC
1

【讨论】:

【参考方案3】:

我在尝试使用 pip 在 Centos 6.4 上的系统级别安装 Fabric 时遇到上述错误。 (Fabric 使用 pycrypto)。

warning: GMP or MPIR library not found; Not building Crypto.PublickKey._fastmath

这就是我的工作方式:

yum install gmp-devel
sudo pip uninstall ecdsa pycrypto paramiko fabric 
# clear out the pip build dirs
rm -rf /tmp/pip-*
# make sure the directory containing libgmp.so.3 is on the python path
export LD_LIBRARY_PATH="/usr/lib64:$LD_LIBRARY_PATH"  
pip install fabric 

【讨论】:

【参考方案4】:

仅适用于近年来遇到此问题的任何人,因为我相信会有/将会有一些。通过运行以下命令,我能够在我的 Debian Jessie 安装中轻松解决此问题。

$ sudo apt-get install python-dev

然后再次尝试安装。就我而言,我试图使用以下命令通过 pip 安装 ansible。 也让那些能够在相同情况下看到这篇文章的人。

$ sudo pip install ansible

现在的输出应该如下。

Successfully installed pycrypto
Cleaning up...

我希望这对以后的人有所帮助! - 贾斯汀

【讨论】:

【参考方案5】:

您缺少用于构建它的 C++ 库。安装 VS 2017 https://visualstudio.microsoft.com/downloads/#build-tools-for-visual-studio-2017

【讨论】:

以上是关于使用 CentOS 6.4 在 Python 2.7 上修复“警告:未找到 GMP 或 MPIR 库;未构建 Crypto.PublickKey._fastmath”错误的主要内容,如果未能解决你的问题,请参考以下文章

使用 CentOS 6.4 在 Python 2.7 上修复“警告:未找到 GMP 或 MPIR 库;未构建 Crypto.PublickKey._fastmath”错误

Centos 6.4 python 2.6 升级到 3.5.2

CentOS 6.4 升级python 2.6.6 到 python 2.7.9

centos 6.4 升级python到版本2.7.12

centos 6.4 升级python到版本2.7.12

CentOS 7下安装Python3.6.4