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

Ошибка брандмауэра SSL при использовании OpenSSL

Я пытался установить pycurl в virtualenv с помощью pip, и я получил эту ошибку

ImportError: pycurl: libcurl link-time ssl backend (openssl) is different from compile-time ssl backend (none/other)

Я прочитал документацию, в которой говорится: "Чтобы исправить это, вам нужно указать setup.py, что используется бэкэнд SSL (источник), хотя я не уверен, как для этого, поскольку я установил pycurl, используя pip.

Как я могу указать бэкэнд SSL при установке pycurl с pip?

Спасибо

4b9b3361

Ответ 1

Прочитав их файл INSTALLATION, я смог решить свою проблему, установив переменную среды и выполнив переустановку

  • удалить существующую установку pycurl

    pip uninstall pycurl

  • переменная экспорта с вашим ssl-бэкэндом времени соединения (который выше представлен openssl)

    export PYCURL_SSL_LIBRARY=openssl

  • затем переустановите pycurl без кэша

    pip install pycurl --no-cache-dir

Там может быть другое решение, но оно отлично работает для меня на установках virtualenv и pip.

Ответ 2

helloworld2013 ответ правильный, но ключ соответствует библиотеке SSL, которую ожидает pycurl. Ошибка будет выглядеть примерно так:

pycurl: libcurl link-time ssl backend (<library> ) отличается от базы данных ssl-времени компиляции (<library> или "none/other" )

Чтобы исправить это, вы должны использовать библиотеку, которую ожидает pycurl. В моем случае моя ошибка была "pycurl: libcurl link-time ssl backend (nss) отличается от компиляции ssl backend (openssl)", поэтому мое исправление было:

pip uninstall pycurl
export PYCURL_SSL_LIBRARY=nss
pip install pycurl

Ответ 3

С OSX 10.13, brew -установленной openSSL и virtualenv, мне удалось:

workon ..your-environment-here..
pip uninstall pycurl
export PYCURL_SSL_LIBRARY=openssl
export LDFLAGS=-L/usr/local/opt/openssl/lib;export CPPFLAGS=-I/usr/local/opt/openssl/include;pip install pycurl --compile --no-cache-dir

Ответ 4

С помощью pip 7.1 вы можете поместить в свой файл требований следующее:

pycurl==7.19.5.1 --global-option="--with-nss"

Просто замените nss на соответствующую базу данных ssl.

Ответ 5

Это сработало для меня:

pip uninstall pycurl
export PYCURL_SSL_LIBRARY=nss
easy_install pycurl

Ничего из этого не сработало для меня (обратите внимание, что разница просто easy_install vs pip):

pip uninstall pycurl
export PYCURL_SSL_LIBRARY=[nss|openssl|ssl|gnutls]
pip install pycurl
#xor
curl -O https://pypi.python.org/packages/source/p/pycurl/pycurl-7.19.3.1.tar.gz
#...
python setup.py --with-[nss|openssl|ssl|gnutls] install

Ответ 6

Метод исправления pycurl после обновления Mac OS High Sierra:

  • Переустановите библиотеки curl для использования OpenSSL вместо SecureTransport

    brew install curl --with-openssl
    
  • Установить pycurl с правильной средой и путями времени сборки

    export PYCURL_SSL_LIBRARY=openssl
    pip uninstall pycurl 
    pip install --no-cache-dir --global-option=build_ext --global-option="-L/usr/local/opt/openssl/lib" --global-option="-I/usr/local/opt/openssl/include" --user pycurl
    

Ответ 7

У меня была эта проблема в течение нескольких дней. Наконец, с помощью других ответов здесь (в основном, Александр Тяпков), я получил его работу для AWS Elastic Beanstalk.

Ручная установка (соединение с SSH):

sudo pip uninstall pycurl
curl -O https://pypi.python.org/packages/source/p/pycurl/pycurl-7.43.0.tar.gz
sudo pip install pycurl-7.43.0.tar.gz --global-option="--with-nss"

ВАЖНО: Обратите внимание, что вы должны убедиться, что используете курсорную версию Python и PIP, иначе вы можете скомпилировать ее для Python 2.x и использовать v3.x.

Автоматическая установка в эластичном бобовом стебле:

files:
  "/usr/local/share/pycurl-7.43.0.tar.gz" :
    mode: "000644"
    owner: root
    group: root
    source: https://pypi.python.org/packages/source/p/pycurl/pycurl-7.43.0.tar.gz

commands:
  01_download_pip3:
    # run this before PIP installs requirements as it needs to be compiled with OpenSSL
    command: 'curl -O https://bootstrap.pypa.io/get-pip.py'
  02_install_pip3:
    # run this before PIP installs requirements as it needs to be compiled with OpenSSL
    command: 'python3 get-pip.py'
  03_pycurl_uninstall:
    # run this before PIP installs requirements as it needs to be compiled with OpenSSL
    command: '/usr/bin/yes | sudo pip uninstall pycurl'
  04_pycurl_download:
    # run this before PIP installs requirements as it needs to be compiled with OpenSSL
    command: 'curl -O https://pypi.python.org/packages/source/p/pycurl/pycurl-7.43.0.tar.gz'
  05_pycurl_reinstall:
    # run this before PIP installs requirements as it needs to be compiled with OpenSSL
    command: 'sudo pip install pycurl-7.43.0.tar.gz --global-option="--with-nss"'

container_commands:
  09_pycurl_reinstall:
    # run this before PIP installs requirements as it needs to be compiled with OpenSSL
    # the upgrade option is because it will run after PIP installs the requirements.txt file.
    # and it needs to be done with the virtual-env activated
    command: 'source /opt/python/run/venv/bin/activate && pip3 install /usr/local/share/pycurl-7.43.0.tar.gz --global-option="--with-nss" --upgrade'

У меня была эта проблема, потому что я пытался настроить Celery 4 с Django 1.10 в Elastic Beanstalk. Если это ваше дело, я написал полное сообщение в блоге об этом.

Ответ 8

Я на CentOS 7. Я попробовал все вышеперечисленное и не мог заставить что-либо работать. Оказывается, мне нужно было запустить их как пользователь root. Поэтому, если у вас возникли проблемы, попробуйте любое из перечисленных выше решений от имени пользователя root. Например, вот что сработало для меня:

su -
pip uninstall pycurl
export PYCURL_SSL_LIBRARY=[nss|openssl|ssl|gnutls]
pip install pycurl

Конечно, применяются все обычные заявления об отказе от имени пользователя root.

Примечание: [nss | openssl | ssl | gnutls] в приведенном выше коде означает выбрать один и не включать квадратные скобки или pipes. Человек, который задал оригинальный вопрос, выбрал бы openssl. В моем конкретном случае я выбрал nss. В вашем сообщении об ошибке должен быть указан ваш выбор.

Редактирование 2019: Выполнение sudo pip install может вызвать проблемы с установкой системы Python. Возможно, попробуйте поработать в виртуальной среде Python и установить пакеты там. Если это не сработает, уловка sudo в моем ответе, вероятно, является одним из последних вариантов для рассмотрения.

Ответ 9

Вы можете скачать tar.gz файл из здесь. Затем извлеките его в папку. Там вы найдете файл setup.py. Запустите команду там, где упоминается сайт. Например:

python setup.py --with-[ssl|gnutls|nss] install

FYI: Я пытался установить pycurl в свои окна, но я не мог. Но сделал это на моем Linux.

Ответ 10

Я запускаю это на OS X, и некоторые из вышеперечисленных решений не работают. Подобно комментарию Эдварда Ньюэлла переменная PYCURL_SSL_LIBRARY, казалось, была полностью проигнорирована.
Дальнейшее чтение doc для PycURL показало следующее:

pip может переустановить пакет, который он ранее скомпилировал, вместо перекомпиляции pycurl с новыми параметрами

Поэтому мне пришлось заставить его скомпилировать с помощью:

pip install --compile pycurl

Это работает в ряде случаев. Тем не менее, я столкнулся с несколькими системами, которые продолжали игнорировать переменную, поэтому, как и maharg101 answer, я прибегал к параметрам установки, которые через pip можно настроить следующим образом:

pip install pycurl --global-option="--with-[ssl|gnutls|nss]"

где вы выбираете один из трех вариантов в квадратных скобках. Обратите внимание, что доступная опция ssl и не openssl. Если вы укажете --with-openssl, вы получите сообщение об ошибке. Также обратите внимание, что если вы перепутали с переменной PYCURL_SSL_LIBRARY и переключили ее на фанковые значения, чтобы увидеть, что произойдет, эта последняя команда обязательно поймает ее и выдаст ошибку, если значение установлено, но не является допустимым.

Ответ 11

Переустановка curl

Я пробовал каждое предложение из этого обсуждения, но никто не работал на меня. В качестве решения я переустановил завиток и curlib. После этого я смог установить pycurl с поддержкой ssl внутри среды.

В начале:

'PycURL/7.43.0 libcurl/7.47.0 GnuTLS/3.4.10 zlib/1.2.8 libidn/1.32 librtmp/2,3'

Часть 1.Re/Installation with pip

Во-первых, я удалил pycurl из virtualenv с помощью pip, как было предложено предыдущие ответы:

pip uninstall pycurl
export PYCURL_SSL_LIBRARY=openssl
pip install pycurl --global-option="--with-openssl"

Идея здесь заключается в том, что пакет был кэширован, и мы просто переустанавливаем его с помощью опции openssl.

Я также попытался перекомпилировать pycurl с помощью pip, используя:

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

.. но имел ту же ошибку после запуска:

python
import pycurl
pycurl.version

ImportError: pycurl: libcurl link-time ssl backend (gnutls) - это отличающийся от бэкэнда ssl-времени компиляции ( openssl)

Часть 2. Установка из tar

После того, как предыдущий метод не работал, я решил установить pycurl из tar с помощью:

curl -O https://pypi.python.org/packages/source/p/pycurl/pycurl-7.43.0.tar.gz
sudo tar -xzvf pycurl-7.43.0.tar.gz
cd pycurl-7.43.0/
sudo python setup.py --with-ssl install

Он установил pycurl глобально, но не в пределах virtualenv. Я также не проверял, был ли он установлен с поддержкой SSL или нет, но думаю, что все еще без ssl.

Часть 3. Переустановка curl и curllib

Наконец, я понял, что pycurl обычно не устанавливается в среду, потому что глобальные curl и libcurl скомпилированы с помощью gnutls.

Перед запуском проверьте его:

curl-config --configure

Одна из выходных строк будет

'- без -ssl' '--with-gnutls'

Чтобы перекомпилировать его:

Сначала снимите curl:

sudo apt-get purge curl

Установите зависимости сборки, необходимые для завивки

sudo apt-get build-dep curl

Получить последние (по состоянию на 20 декабря 2016 года) libcurl

mkdir ~/curl
wget http://curl.haxx.se/download/curl-7.51.0.tar.bz2
tar -xvjf curl-7.51.0.tar.bz2
cd curl-7.51.0

Обычные шаги для создания приложения из источника

./configure
./make
 sudo make install

Если openssl установлен правильно, то configure найдет его автоматически. Выход будет:

версия для завивки: 7.51.0
  Настройка хоста: x86_64-pc-linux-gnu
  Установочный префикс:/usr/local
  Компилятор: gcc
  Поддержка SSL: включена (OpenSSL)...

Устранить любые проблемы кэширования местоположений в C-уровне ( "кеш общих библиотек" )

sudo ldconfig

Теперь попробуйте переустановить pycurl в среде:

curl -O https://pypi.python.org/packages/source/p/pycurl/pycurl-7.43.0.tar.gz
pip install pycurl-7.43.0.tar.gz --global-option="--with-openssl"

Результат должен быть:

python
import pycurl
pycurl.version

'PycURL/7.43.0 libcurl/7.51.0 OpenSSL/1.0.2g zlib/1.2.8 librtmp/2.3'

Ответ 12

Это сработало для меня:

pip install --compile --install-option = "- with-openssl" pycurl

Ответ 13

Я попробовал все здесь на MacOS 10.13 безуспешно. Затем я нашел https://gist.github.com/webinista/b4b6a4cf8f158431b2c5134630c2cbfe, который работал:

brew install curl --with-openssl
pip uninstall pycurl
export PYCURL_SSL_LIBRARY=openssl
export LDFLAGS=-L/usr/local/opt/openssl/lib;export CPPFLAGS=-I/usr/local/opt/openssl/include; pip install pycurl --compile --no-cache-dir

Это сработало для меня как без использования virtualenv, так и внутри virtualenv.

Ответ 14

Для тех, у кого есть проблемы внутри PyCharm CE на MacOS Mojave, вот как у меня это работает в venv:

  • указать версию: 7.43.0.1
  • Опции: --install-option = - with-openssl --install-option = - openssl-dir =/usr/local/opt/openssl

PyCharm Project Interpreter screen shot

Ответ 15

Не уверен, что это из-за работы в virtualenv, но в CentOS 7 эти решения не работали для меня; скомпилированные объекты по-прежнему захватывались из кеша, когда я переустанавливал. Если вы столкнулись с такой же проблемой после использования других решений, попробуйте следующее:

pip uninstall pycurl
export PYCURL_SSL_LIBRARY=[nss|openssl|ssl|gnutls]
pip install pycurl --no-cache-dir

Ответ 16

Ошибка:

ImportError: pycurl: libcurl link-time ssl backend (openssl) отличается от бэкэнда ssl-времени компиляции (нет/другого)

Это сработало для меня, Mac 10.13, python 3.5, импорт pycurl работал после установки как

pip3 uninstall pycurl;

pip3 install --compile --install-option="--with-openssl" pycurl

Ответ 17

После долгого простоя, я обнаружил, что яблоко перестало включать заголовки OpenSSL с OS X 10.11 El Capitan. как исправить?

1) brew install openssl

2) echo 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.bash_profile (or .zshrc for zsh, etc)

3) pip uninstall pycurl

4) pip install --install-option="--with-openssl" --install-option="--openssl-dir=/usr/local/opt/openssl" pycurl

Ответ 18

Для python 2.7

sudo apt-get install build-essential libssl-dev libffi-dev python-dev

Для python 3.5 также установите следующее:

sudo apt-get install python3.5-dev

Загрузите последний pycurl-7.43.0.tar.gz(md5) Источник из pypi https://pypi.python.org/pypi/pycurl/7.43.0#downloads и выполните следующую команду:

python setup.py --with-openssl install

Также вы можете сделать это в среде python:

(test_env)[email protected]:~/Downloads/pycurl-7.43.0$ python setup.py --with-openssl install

Ответ 19

pip install -U pip

if [ "$(curl --version | grep NSS 2>/dev/null)" ]; then
    pip install --compile --install-option="--with-nss" pycurl
else
    pip install --compile --install-option="--with-openssl" pycurl
fi

Ответ 20

Я столкнулся с этой проблемой, и ответ Sanket Jagtap работал у меня. Я попробовал ответить с ответом большинства голосов, но это не сработало.

Моя старшая версия openssl 1.0.1t, я думаю, что переустановка openssl может решить эту проблему.

--- pycurl openssl backend time....

Я перестроил последнюю версию openssl и попробовал этот ответ. Проверьте это.

pip install --compile --install-option="--with-openssl" pycurl

Это сработало для меня.

Я рекомендую переустановить наш openssl для try..

Ответ 21

Следующее работало для меня с Python3.6

MacOS High-Sierra

sudo pip3 uninstall pycurl
sudo pip3 install --compile --install-option="--with-openssl" pycurl 

CentOS 7

sudo pip3 uninstall pycurl
sudo pip3 install --compile --install-option="--with-nss" pycurl

Ответ 22

Эта ссылка суммирует причину возникновения ошибок и дает четкую инструкцию по устранению проблемы.

https://cscheng.info/2018/01/26/installing-pycurl-on-macos-high-sierra.html

Для меня проблема возникла, когда я перешел в High-Sierra из El Капитан.

Ответ 23

Та же проблема с amazonlinux - решена
У меня была эта проблема при создании образа докера на основе amazonlinux, установке python3.7 и добавлении модуля pycurl. Все остальные модули Python были установлены правильно, кроме Pycurl. Попробовав многие решения, предложенные в темах, связанных с этой проблемой, я наконец решил свою проблему, используя следующие команды для установки всех частей.
yum -y install python3 python3-devel gcc libcurl-devel aws-cli openssl-static.x86_64
затем установил другие модули, такие как psycopg2-binary, запросы, сертификаты, используя:
pip3 install --user --no-cache-dir -r requirements.txt

и, наконец, установил модуль pycurl, используя:

pip3 install --user --global-option="--with-openssl" --no-cache-dir pycurl
и передавая здесь глобальный вариант openssl. Установка статической библиотеки openssl-static.x86_64 решила проблему в моем случае, когда использовалась глобальная опция, используемая второй командой pip3.

Ответ 24

export CPPFLAGS=-I/usr/local/opt/openssl/include
export LDFLAGS=-L/usr/local/opt/openssl/lib

pip install pycurl --global-option="--with-openssl"