Ошибка брандмауэра 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?
Спасибо
Ответы
Ответ 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"