Установлена ошибка SSL при установке pycurl после SSL
Только для начала:
- Я запускаю Mac OS 10.7.5
- У меня установлен curl 7.21.4 (пришел с инструментами dev, которые, как мне кажется)
- У меня есть python 2.7.1
Я пытаюсь установить pycurl, но каждый раз, когда я пытаюсь запустить его, я получаю:
ImportError: pycurl: libcurl link-time ssl backend (openssl) is different from compile-time ssl backend (none/other)
Сначала я установил pycurl с помощью настройки:
python setup.py install
Что не работает (поскольку SSL не был настроен).
С тех пор я удалил pycurl (sudo rm -rf /Library/Python/2.7/site-packages/pycurl*
), прежде чем пытаться:
export PYCURL_SSL_LIBRARY=openssl
easy-install pycurl
и снова перед попыткой:
python setup.py --with-ssl install
Однако, я все еще получаю ту же ошибку, что ssl не скомпилирован. Как будто все инструкции игнорируют мои попытки.
setup.py вообще не жалуется при установке, но простая установка печатает это сообщение после установки PYCURL_SSL_LIBRARY env var:
src/pycurl.c:151:4: warning: #warning "libcurl was compiled with SSL support, but configure could not determine which " "library was used; thus no SSL crypto locking callbacks will be set, which may " "cause random crashes on SSL requests"
который, по-видимому, указывает на то, что он полностью игнорирует тот факт, что я просто сказал ему установить с openssl...
Есть ли что-то, что мне не хватает в настройке?
Ответы
Ответ 1
Когда вы получите:
failed: ImportError: pycurl: libcurl link-time ssl backend (nss) is different from compile-time ssl backend (none/other)
Вам необходимо перекомпилировать pycurl с правильно установленной PYCURL_SSL_LIBRARY.
Переустановка кажется двухэтапным процессом.
Кажется, что pip загружает материал где-то, компилирует его, а затем помещает туда, где python может его использовать.
Если у вас есть скомпилированная версия в кеше, вы буквально ввернуты, потому что она не будет перекомпилирована. Он "дает" python одно и то же, независимо от того, что находится в переменной PYCURL_SSL_LIBRARY.
Решение довольно простое, стереть кеш, чтобы заставить его перекомпилировать. В зависимости от вашей операционной системы кеш может располагаться в нескольких местах. Вы можете пойти и искать его, используя тот факт, что есть setup.py. В нем есть строка PACKAGE = "pycurl". Но нет никакой необходимости в всех этих неприятностях. Последняя версия pip поддерживает опцию install --compile.
Обновление до последней версии:
pip install --upgrade pip #Healthy anyway
Снимите текущий pycurl с:
pip uninstall pycurl
Задайте свою PYCURL_SSL_LIBRARY, как вам нужно:
export PYCURL_SSL_LIBRARY=nss #For me this was the required setting
Наконец, запустите
pip install --compile pycurl
Обратите внимание, что вам могут понадобиться некоторые пакеты -devel для различных файлов заголовков, необходимых в процессе компиляции.
Ответ 2
Мне пришлось использовать следующее в CentOS 7:
sudo pip install --no-cache-dir --compile --ignore-installed --install-option="--with-nss" pycurl
Нет uninstall
необходимо или установить PYCURL_SSL_LIBRARY
. Все запечено в одну линию.
Ответ 3
Вам также нужны "dev tools" (заголовки/библиотеки) для openssl.
Также попробуйте последнюю версию pycurl, она может работать из коробки.
Ответ 4
чтобы добавить небольшое обновление к правильному ответу, данному @Andrei, я бы сказал, что последней команде необходимо принудительно выполнить перезагрузку и выполнить настройку, добавив no-cache-dir в pip install
pip install --no-cache-dir --compile pycurl
Это приведет к полной компиляции.