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

Установлена ​​ошибка 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...

Есть ли что-то, что мне не хватает в настройке?

4b9b3361

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

Это приведет к полной компиляции.