Ошибка 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 не жалуется вообще при установке, но easy install печатает это сообщение после того, как я установил 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...

есть ли что-то, что я пропустил в настройке?

6 ответов


если вы:
    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 для различных файлов заголовков, необходимых в процессе компиляции.


Я должен был использовать следующее на CentOS 7:

sudo pip install --no-cache-dir --compile --ignore-installed --install-option="--with-nss" pycurl

нет uninstall надо или задание PYCURL_SSL_LIBRARY. Все запечено в одну линию.


Вам также нужны "dev tools" (заголовки/библиотеки) для openssl.

также попробуйте последний выпуск pycurl, он может работать из коробки.


чтобы добавить небольшое обновление к правильному ответу, данному @Andrei, я бы сказал, что последняя команда должна принудительно перезагрузить и настроить выполнение, добавив no-cache-dir в pip install

pip install --no-cache-dir --compile pycurl

это заставит завершить компиляцию.


для mac, судо пункт Установить ... нет-кэш-Дир --компиляция --игнор-установлен-установить-параметр="параметр--with-OpenSSL и" pycurl из спасибо


предполагая, что у вас установлен openssl через homebrew, проверьте brew info openssl. Вам может потребоваться включить некоторые флаги компиляции через env-vars, чтобы использовать его, как и многие" только бочонки".