Ошибка серверной части 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?



спасибо

889   21  

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:

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

    brew install curl --with-openssl
    
  2. установите 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.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. Переустановка локона и 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" pycurl 

CentOS 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

    Ничего не найдено.