Fixing ": библиотека GMP или MPIR не найдена; не создается ошибка Crypto.PublickKey._fastmath" на Python 2.7 с CentOS 6.4
Я запускаю сервер CentOS 6.4 с Python 2.7 (установлен через PythonBrew script)
У меня gmp установлен через 'yum install gmp'
и python-devel, установленный через "yum install python-devel" (но он для серии python 2.6)
Я пытаюсь установить pycrypto на свой сервер, но он дает мне
warning: GMP or MPIR library not found; Not building Crypto.PublickKey._fastmath
Есть ли способ сделать pip "распознать" мою установку gmp?
Спасибо: D
Ответы
Ответ 1
Я получил вышеуказанную ошибку при попытке установить Fabric на системном уровне в Centos 6.4, используя pip. (Ткань использует 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
Ответ 2
Вот шаг за шагом, который я только что составил на моем CentOS-сервере (последовательность предполагает, что вы не root):
УСТАНОВКА LIBGMP
Во-первых, установите и установите libgmp где-нибудь в вашем домашнем каталоге, как показано ниже:
./configure prefix=$HOME
make
make install prefix=$HOME
Это создаст каталог ~/lib, a ~/include и ~/share, если он уже не существует.
Затем добавьте следующую строку в ваш .bashrc:
export LD_LIBRARY_PATH=$HOME/lib:/usr/local/lib:$LD_LIBRARY_PATH
Сделайте ". ~/.bashrc", чтобы обеспечить соблюдение ваших изменений.
PYCRYPTO BUILD и INSTALL
Нам нужно иметь дело с процессом установки вручную.
Во-первых, мы можем скачать pycrypto следующим образом:
Затем нам нужно обмануть конфигурацию "бит":
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
-
Затем отредактируйте файл setup.py, выполнив поиск ключевого слова "_fastmath"
и убедитесь, что декларация 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
Вероятно, вам понадобится gmp-devel. Это дает pycrypto заголовки, которые нужно построить с помощью libgmp.
В Ubuntu у меня установлен только libgmp10. Я пытаюсь установить такое же предупреждение при попытке установить pycrypto. После установки пакета libgmp-dev Ubuntu предупреждение исчезло, а сборка script указала, что использует расширение _fastmath.
Если вы уже установили pycrypto без _fastmath, вы можете переустановить его с помощью флага -I, например.
sudo pip install -I pycrypto
Ответ 4
Просто для тех, кто сталкивается с этим в последние годы, поскольку я уверен, что есть/будут некоторые. Я смог легко исправить эту проблему на моей установке Debian Jessie, выполнив следующую команду.
$ sudo apt-get install python-dev
Затем повторите попытку. В моем случае я пытался установить доступную через pip команду со следующей командой. Также для тех, кто сможет встретить этот пост с тем же сценарием.
$ sudo pip install ansible
Теперь вывод должен быть следующим.
Successfully installed pycrypto
Cleaning up...
Надеюсь, это поможет кому-то по дороге!
- justin