Я пытался установить 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?
Благодарность
Ответы:
Прочитав их файл INSTALLATION, я смог решить свою проблему, установив переменную среды и выполнив переустановку
удалить существующую
pycurl
установкуpip uninstall pycurl
экспортная переменная с вашим сервером SSL во время компоновки (это openssl выше)
export PYCURL_SSL_LIBRARY=openssl
затем повторно установить
pycurl
с без кэшаpip install pycurl --no-cache-dir
Там может быть другое решение, но оно отлично работает для меня при установке
virtualenv
иpip
установке.источник
PYCURL_SSL_LIBRARY=openssl
работает отлично!set -x PYCURL_SSL_LIBRARY openssl
вместоexport PYCURL_SSL_LIBRARY=openssl
если вы используете рыбу консоли вместо Баша .Ответ helloworld2013 правильный, но ключ соответствует библиотеке SSL, которую ожидает pycurl. Ошибка будет примерно такой:
pycurl: серверная часть ssl времени компоновки libcurl ( <библиотека> ) отличается от серверной части ssl времени компиляции ( <библиотека> или " none / other ")
Чтобы исправить это, вы должны использовать библиотеку, которую ожидает pycurl. В моем случае моя ошибка была « pycurl: libcurl link-time ssl backend ( nss ) is different from compile-time ssl backend (openssl) », поэтому мое исправление было:
источник
PYCURL_SSL_LIBRARY
что полностью игнорируется. Для меня бэкэнд ssl во время компиляции всегда "(none / other)", хотяecho PYCURL_SSL_LIBRARY
даетopenssl
.pycurl
и установил с флагами:pip install --global-option="--with-openssl" --global-option=build_ext --global-option="-L/usr/local/opt/openssl/lib" --global-option="-I/usr/local/opt/openssl/include" pycurl
pip install pycurl --compile --no-cache-dir
в CentOS 7.3.С OSX 10.13, openSSL и virtualenv с установленным пивом мне удалось:
источник
brew reinstall openssl
С помощью pip 7.1 вы можете поместить в свой файл требований следующее:
pycurl==7.19.5.1 --global-option="--with-nss"
Просто замените nss соответствующей серверной библиотекой ssl.
источник
Метод исправления 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
источник
--user
флаг, как указано выше, я получил:Can not perform a '--user' install. User site-packages are not visible in this virtualenv.
Это сработало для меня:
У меня ничего из этого не сработало (обратите внимание, что разница просто 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
источник
easy_install
вариант оказался единственным, что сработало. Я не понимаю, почему это так сложно. Мне было нужноexport PYCURL_SSL_LIBRARY=openssl
. Мой один сообщил "нет / другое" для скомпилированной библиотеки.У меня была эта проблема несколько дней. Наконец, с помощью других ответов здесь (в основном Александра Тяпкова) я заставил его работать для 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.
Автоматическая установка в Elastic Beanstalk:
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. Если это ваш случай, я написал об этом полный пост в блоге .
источник
Я использую CentOS 7. Я пробовал все вышеперечисленное, но ничего не заработало. Оказывается, мне нужно было запустить их как пользователь root. Поэтому, если у вас возникли проблемы, попробуйте любое из вышеперечисленных решений от имени пользователя root. В качестве примера вот что сработало у меня:
Конечно, применяются все обычные заявления об отказе от ответственности о работе от имени пользователя root.
Примечание. [Nss | openssl | ssl | gnutls] в приведенном выше коде означает выбор одного и не включает квадратные скобки или каналы. Человек, задавший исходный вопрос, выбрал бы openssl. В моем конкретном случае я выбрал nss. В сообщении об ошибке должно быть указано, какой выбор сделать.
Изменение 2019: выполнение
sudo pip install
может вызвать проблемы с установкой Python в системе. Возможно, попробуйте поработать в виртуальной среде Python и установить там пакеты. Если это не сработает, трюк с sudo в моем ответе, вероятно, является одним из последних вариантов, которые следует рассмотреть.источник
Вы можете скачать файл tar.gz здесь . Затем распакуйте его в папку. Там вы найдете файл setup.py. Выполните команду, указанную на сайте. Например:
python setup.py --with-[ssl|gnutls|nss] install
К вашему сведению: я пытался установить pycurl в свои окна, но не смог. Но сделал это на моем линуксе.
источник
Я использую это на OS X, и некоторые из вышеперечисленных решений не работали. Подобный комментарий Эдварда Ньюэлла
PYCURL_SSL_LIBRARY
переменная , казалось, были полностью проигнорированы.Дальнейшее чтение установочного документа PycURL показало следующее:
Поэтому мне пришлось заставить его скомпилировать:
pip install --compile pycurl
Это работает во многих случаях. Тем не менее, я столкнулся с несколькими системами, которые продолжали игнорировать переменную, поэтому, как и в ответе maharg101 , я прибег к параметрам установки, которые через pip можно установить следующим образом:
pip install pycurl --global-option="--with-[ssl|gnutls|nss]"
где вы выбираете один из трех вариантов внутри квадратных скобок. Обратите внимание, что доступная опция есть,
ssl
а нетopenssl
. Если вы укажете,--with-openssl
вы получите сообщение об ошибке. Также обратите внимание, что если вы возились сPYCURL_SSL_LIBRARY
переменной и переключили ее на забавные значения, чтобы увидеть, что произойдет, эта последняя команда обязательно поймает ее и выдаст ошибку, если значение установлено, но недействительно.источник
pip install pycurl --global-option="--with-nss"
для меня. Для протокола, моя ошибкаImportError: pycurl: libcurl link-time ssl backend (nss) is different from compile-time ssl backend (openssl)
Переустановка локона
Я пробовал все предложения из этого обсуждения, но ни один из них не помог мне. В качестве решения я переустановил curl и curlib. После этого я смог установить pycurl с поддержкой ssl внутри среды.
В начале:
Часть 1. Повтор / установка с помощью pip
Во-первых, я удалил pycurl из virtualenv с помощью pip, как было предложено в предыдущих ответах:
pip uninstall pycurl export PYCURL_SSL_LIBRARY=openssl pip install pycurl --global-option="--with-openssl"
Идея здесь в том, что пакет был кеширован, и мы просто повторно установили его с опцией openssl.
Я также попытался перекомпилировать pycurl с помощью pip, используя:
..но была такая же ошибка после запуска:
python import pycurl pycurl.version
Часть 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
Получить последнюю версию (по состоянию на 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
Обычные шаги для создания приложения из исходного кода
Если openssl установлен правильно, configure найдет его автоматически. Результат будет:
Устранение любых проблем с кешами расположения библиотек C-уровня («кеш общей библиотеки»)
Теперь попробуйте переустановить 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
источник
Для тех, у кого есть проблема внутри PyCharm CE на macOS Mojave, вот как я заставил его работать в venv:
источник
Это сработало для меня:
источник
Я пробовал все здесь на 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.
источник
Не уверен, что это из-за работы в virtualenv, но на CentOS 7 эти решения у меня не работали; Скомпилированные объекты все еще захватывались из каталога кеша, когда я переустанавливал. Если вы столкнулись с той же проблемой после того, как попробовали другие решения здесь, попробуйте следующее:
источник
--no-cahe-dir
опцию. Просто хочу еще раз упомянуть, что ему удалось запустить только под root с помощьюsu -
@alfonso. Делатьsudo pip3 ...
было недостаточно. Вероятно, необходимо для подбора переменной окружения.Ошибка:
Это сработало для меня, Mac 10.13, python 3.5, импорт pycurl работал после такой установки
pip3 uninstall pycurl; pip3 install --compile --install-option="--with-openssl" pycurl
источник
После долгого зацикливания на этом я обнаружил, что яблоко перестало включать заголовки 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
источник
Та же проблема на amazonlinux - решена. У
меня была эта проблема при создании образа докера на основе amazonlinux, установке python3.7 и добавлении модуля pycurl. Все остальные модули python были установлены правильно, кроме pycurl. Попробовав многие решения, предложенные в потоках, связанных с этой проблемой, я, наконец, решил свою проблему, используя следующие команды для установки всех частей.
yum -y install python3 python3-devel gcc libcurl-devel aws-cli openssl-static.x86_64
затем установил другие модули, такие как psycopg2-binary, requests, certifi, используя:
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.
источник
Для Python 2.7
Для 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)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
источник
Я столкнулся с этой проблемой, и ответ Санкета Джагтапа сработал для меня. Я попробовал дать ответ, набравший наибольшее количество голосов, но он не сработал.
Моя старая версия openssl - 1.0.1t, я думаю, что переустановка 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 Captain.
источник
FWIW, я столкнулся с множеством проблем, заставляя это работать через AWS Elastic Beanstalk, и, наконец, смог заставить его работать с:
packages: yum: openssl-devel: [] libcurl-devel: [] container_commands: # Reinstall PyCurl with correct ssl backend 05_reinstall_pycurl: command: | pip install --upgrade pip pip uninstall -y pycurl pip install --global-option='--with-openssl' pycurl
источник
Недавно при обновлении проекта Django у меня была аналогичная ошибка. Но на этот раз установка переменной окружения не сработала. Поэтому мне пришлось установить обе переменные среды
export PYCURL_SSL_LIBRARY=openssl
и передать флаг--global-option="with-openssl"
.Исходный ответ был размещен на этой странице
источник
export CPPFLAGS=-I/usr/local/opt/openssl/include export LDFLAGS=-L/usr/local/opt/openssl/lib pip install pycurl --global-option="--with-openssl"
источник