Ошибка серверной части 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?
спасибо
21 ответов:
прочитав их установочный файл, я смог решить свою проблему, установив переменную окружения и сделал переустановку
удалить существующие
pycurlустановка
pip uninstall pycurlэкспортировать переменную с вашей ссылке-время протокол SSL сервера (который в OpenSSL выше)
export PYCURL_SSL_LIBRARY=opensslзатем повторно установить
pycurl
pip install pycurlтам может быть другое решение, но это прекрасно работает для меня на
virtualenvиpipустановки.
ответ helloworld2013 правильный, но ключ соответствует библиотеке SSL, которую ожидает pycurl. Ошибка будет что-то вроде:
pycurl: libcurl link-time ssl backend () отличается от времени компиляции ssl backend ( или "нет/другие")
чтобы исправить это, вы должны использовать библиотеку, которую ожидает pycurl. В моем случае, моя ошибка была "pycurl: libcurl link-time ssl backend (nss) отличается от времени компиляции ssl backend (openssl)", значит, мое исправление было:
pip uninstall pycurl export PYCURL_SSL_LIBRARY=nss pip install pycurl
С 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
С помощью pip 7.1 вы можете поместить в свой файл требований следующее:
pycurl==7.19.5.1 --global-option="--with-nss"просто замените nss соответствующей серверной библиотекой ssl.
это сработало для меня:
pip uninstall pycurl export PYCURL_SSL_LIBRARY=nss easy_install pycurlничего из этого не сработало для меня (обратите внимание, что разница просто easy_install против 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
способ исправить 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
у меня была эта проблема в течение нескольких дней. Наконец, с помощью других ответов здесь (в основном Александра Тяпкова) я получил его работу для 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"важно: обратите внимание, что вы должны убедиться, что вы используете currect версию 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'у меня была эта проблема, потому что я пытался настроить Сельдерей 4 с Django 1.10 в Elastic Beanstalk. Если это ваш случай, я написал Полный пост в блоге об этом.
Я на CentOS 7. Я попробовал все вышеперечисленное и не смог заставить ничего работать. Оказывается, мне нужно было запустить их как корневой пользователь. Поэтому, если у вас возникли проблемы, попробуйте любое из вышеперечисленных решений в качестве пользователя root. В качестве примера, вот что сработало для меня:
su - pip uninstall pycurl export PYCURL_SSL_LIBRARY=[nss|openssl|ssl|gnutls] pip install pycurlконечно, все обычные заявления об отказе от работы в качестве пользователя root применяются.
Примечание: [nss|openssl|ssl / gnutls] в приведенном выше коде означает выбрать один и не включать квадратные скобки или трубы. Этот человек, который задал первоначальный вопрос, выбрал бы openssl. В моем конкретном случае, я выбрал НСС. Ваше сообщение об ошибке должно сказать вам, какой выбор сделать.
вы можете скачать tar.файл GZ от здесь. Затем извлеките его в папку. Вы найдете a setup.py файл там. Запустите команду там, что сайт упомянул. Например:
python setup.py --with-[ssl|gnutls|nss] installк вашему сведению: я пытался установить на pycurl из моего окна, но я не мог. Но сделал это на свой Линукс.
я запускаю это на OS X, и некоторые из вышеперечисленных решений не работали. Похоже на комментарий Эдварда Ньюэлла the
PYCURL_SSL_LIBRARYпеременная, казалось, была полностью проигнорирована.
Дальнейшее чтение pycurl installation doc показал следующее:pip может переустановить пакет, который он ранее скомпилировал, вместо перекомпиляции pycurl с новыми указанными параметрами
поэтому мне пришлось форсировать это для компиляции с:
pip install --compile pycurlэто работает в ряде случаев. Тем не менее, я столкнулся с несколькими системами, которые продолжали игнорировать переменную so, похожую на maharg101 ответ, я прибегал к параметрам установки, которые через pip можно установить следующим образом:
pip install pycurl --global-option="--with-[ssl|gnutls|nss]"когда вы выбираете один из трех вариантов в квадратных скобках. Обратите внимание, что доступен параметр
sslи неopenssl. Если вы укажете--with-opensslвы получите сообщение об ошибке. Также обратите внимание, что если вы возились сPYCURL_SSL_LIBRARYпеременная и переключение его на фанки значения, чтобы увидеть, что произойдет эта последняя команда, безусловно, поймать его и бросить ошибку, если значение установлено, но не является допустимым.
переустановка curl
я старался каждое предложение из этой дискуссии, но никто не работал для меня. В качестве решения я переустановил curl и curlib. После этого я смог установить pycurl с поддержкой ssl внутри среды.
в начале:
' PycURL / 7.43.0 libcurl / 7.47.0 GnuTLS/3.4.10 С zlib/1.2.8 этот пакет содержит символы отладки/1.32 librtmp/2.3'
часть 1.Re/Installation с помощью Пип
во-первых, я удалил 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.versionImportError: 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. Переустановка локона и curllib
наконец я понял, что pycurl не устанавливается нормально в среду, потому что global curl и libcurl компилируются с gnutls.
перед началом проверьте это:
curl-config --configureодна из выходных линий будет
'--without-ssl ''--with-gnutls'
перекомпилировать его:
во-первых, снять завиток:
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 найдет его автоматически. На выходе будет:
версия curl: 7.51.0
Установка хоста: x86_64-pc-linux-gnu
Установите префикс: / usr / local
Компилятор: gcc
поддержка SSL: включено (OpenSSL) ...решить любые проблемы с кэшами расположения lib уровня 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.2 g zlib / 1.2.8 librtmp / 2.3'
Не уверен, что это из-за работы в virtualenv, но на CentOS 7 эти решения не работали для меня; скомпилированные объекты все еще были захвачены из кэша dir, когда я переустанавливал. Если вы столкнулись с той же проблемой после попытки других решений здесь, попробуйте следующее:
pip uninstall pycurl export PYCURL_SSL_LIBRARY=[nss|openssl|ssl|gnutls] pip install pycurl --no-cache-dir
ошибка:
ImportError: pycurl из: libcurl использует ссылке-время SSL и бэкэнда (в OpenSSL) отличается от компиляции серверной части протокола SSL (нет/другое)
это работало для меня, Mac 10.13, python 3.5, pycurl импорт работал после установки, как это
pip3 uninstall pycurl; pip3 install --compile --install-option="--with-openssl" pycurl
после того, как я застрял на этом в течение длительного времени, я узнал, что apple перестала включать заголовки 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
для 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.смола.GZ (md5) источник из pypi https://pypi.python.org/pypi/pycurl/7.43.0#downloads и выполните следующую команду:
python setup.py --with-openssl installтакже вы можете сделать это в среде python:
(test_env)user@pc:~/Downloads/pycurl-7.43.0$ python setup.py --with-openssl install
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
я столкнулся с этой проблемой и Sanket Jagtap это работал для меня. Я попробовал ответить с большинством голосов, но это не сработало.
моя старая версия openssl-1.0.1 t, я думаю, что переустановка openssl может решить эту проблему.
--- pycurl's openssl backend time....я перестроил последний openssl и попробовал этой ответ. Проверить это.
pip install --compile --install-option="--with-openssl" pycurlэто работает для меня.
Я рекомендую нам переустановить наш openssl для пытаться..
следующие работали для меня с Python3. 6
MacOS High-Sierra
sudo pip3 uninstall pycurl sudo pip3 install --compile --install-option="--with-openssl" pycurlCentOS 7
sudo pip3 uninstall pycurl sudo pip3 install --compile --install-option="--with-nss" pycurl
эта ссылка суммирует причину возникновения ошибок и дает четкую инструкцию по устранению проблемы.
https://cscheng.info/2018/01/26/installing-pycurl-on-macos-high-sierra.html
для меня проблема возникла, когда я перешел на High-Sierra из El Капитан.
Это сработало для меня:
типун установки --компиляция --установить-параметр="параметр--with-OpenSSL и" pycurl из
export CPPFLAGS=-I/usr/local/opt/openssl/include export LDFLAGS=-L/usr/local/opt/openssl/lib pip install pycurl --global-option="--with-openssl"
Comments