使用 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