Подтвердить что ты не робот

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

4b9b3361

Ответ 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