私はpipを使用してvirtualenvにpycurlをインストールしようとしていましたが、このエラーが発生しました
ImportError: pycurl: libcurl link-time ssl backend (openssl) is different from compile-time ssl backend (none/other)
「これを修正するには、setup.pyにどのSSLバックエンドが使用されているかを伝える必要があります」(source) pipを使用してpycurlをインストールしたため、これを行う方法はわかりませんが。
PipでpycurlをインストールするときにSSLバックエンドを指定するにはどうすればよいですか?
ありがとう
INSTALLATIONファイルを読んだ後、環境変数を設定して問題を解決し、再インストールしました
既存のpycurl
インストールを削除します
pip uninstall pycurl
リンク時SSLバックエンド(上記のopenssl)で変数をエクスポートします
export PYCURL_SSL_LIBRARY=openssl
次に、キャッシュなしでpycurl
を再インストールします
pip install pycurl --no-cache-dir
他にも解決策はありますが、virtualenv
およびpip
のインストールではこれは完璧に機能します。
helloworld2013の答えは正しいですが、キーはpycurlが期待しているSSLライブラリと一致しています。エラーは次のようになります。
pycurl:libcurlリンク時sslバックエンド(<library>)は、コンパイル時sslバックエンド(<ライブラリ>または「none/other」)
修正するには、pycurlが期待しているライブラリを使用する必要があります。私の場合、エラーは「pycurl:libcurlリンク時sslバックエンド(nss)はコンパイル時sslバックエンド(openssl)」、したがって私の修正は:
pip uninstall pycurl
export PYCURL_SSL_LIBRARY=nss
pip install pycurl
OSX 10.13、brew-installed 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
Mac OS High Sierraアップデート後にpycurlを修正する方法:
SecureTransportの代わりにOpenSSLを使用するためにcurlライブラリを再インストールします
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
私は何日もこの問題を抱えていました。最後に、他の回答(主にAlexander Tyapkov)の助けを借りて、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'
Elastic BeanstalkでDjango 1.10を使用してCelery 4を構成しようとしたため、この問題が発生しました。それがあなたの場合、 私はそれについての完全なブログ記事を書きました 。
CentOS 7を使用しています。上記のすべてを試してみましたが、何も機能しませんでした。これらをrootユーザーとして実行する必要があることがわかりました。したがって、問題がある場合は、rootユーザーとして上記のソリューションのいずれかを試してください。例として、ここで私のために働いたものです:
su -
pip uninstall pycurl
export PYCURL_SSL_LIBRARY=[nss|openssl|ssl|gnutls]
pip install pycurl
もちろん、rootユーザーとしての実行に関する通常の免責事項がすべて適用されます。
注:上記のコードの[nss | openssl | ssl | gnutls]は1つを選択することを意味し、角括弧やパイプを含めないでください。元の質問をした人はopensslを選択したでしょう。私の特定のケースでは、nssを選択しました。エラーメッセージから、どの選択を行うべきかがわかります。
Tar.gzファイルは here からダウンロードできます。次に、それをフォルダに抽出します。そこにsetup.pyファイルがあります。サイトが言及したコマンドをそこで実行します。例えば:
python setup.py --with-[ssl|gnutls|nss] install
参考:pycurlをWindowsにインストールしようとしましたが、できませんでした。しかし、私のLinuxでそれをしました。
これをOS Xで実行していますが、上記のソリューションの一部が機能していませんでした。 Edward Newellのコメント と同様に、PYCURL_SSL_LIBRARY
変数は完全に無視されたようです。
PycURLインストールドキュメント をさらに読むと、次のことがわかりました。
pipは、新しく指定されたオプションでpycurlを再コンパイルする代わりに、以前にコンパイルしたパッケージを再インストールする場合があります
したがって、私はそれを強制的にコンパイルする必要がありました:
pip install --compile pycurl
これは多くの場合に有効です。ただし、変数を無視し続けるいくつかのシステムに遭遇したため、 maharg101's answer と同様に、pipを介して次のように設定できるインストールオプションに頼りました。
pip install pycurl --global-option="--with-[ssl|gnutls|nss]"
角括弧内の3つのオプションのいずれかを選択します。使用可能なオプションはssl
およびnotopenssl
です。 --with-openssl
を指定すると、エラーが発生します。また、PYCURL_SSL_LIBRARY
変数をいじってファンキーな値に切り替えて何が起こるかを確認する場合、この最後のコマンドは値を設定しても有効ではない場合、間違いなくキャッチしてエラーをスローすることに注意してください。
これは私のために働いた:
pip install --compile --install-option = "-with-openssl" pycurl
私はこの議論からあらゆる提案を試みましたが、誰も私のために働きませんでした。解決策として、curlとcurlibを再インストールしました。その後、環境内でsslサポートを使用してpycurlをインストールできました。
開始時:
「PycURL/7.43.0 libcurl/7.47.0 GnuTLS/3.4.1 zlib/1.2.8 libidn/1.32 librtmp/2.3」
パート1. pipを使用した再インストール
最初に、以前の回答が提案されたように、pipを使用してvirtualenvからpycurlを削除しました:
pip uninstall pycurl
export PYCURL_SSL_LIBRARY=openssl
pip install pycurl --global-option="--with-openssl"
ここでの考え方は、パッケージがキャッシュされ、opensslオプションで再インストールするだけだということです。
私はまた、pipでpycurlを再コンパイルしようとしました:
pip install pycurl --compile pycurl --no-cache
..しかし、実行後に同じエラーが発生しました:
python
import pycurl
pycurl.version
ImportError:pycurl:libcurlリンク時sslバックエンド(gnutls)はコンパイル時sslバックエンド(openssl)とは異なります
パート2. tarからのインストール
以前の方法が機能しなかった後、私はtarからpycurlをインストールすることに決めました:
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の再インストール
最後に、グローバルなcurlとlibcurlはgnutlsでコンパイルされているため、pycurlは環境に正常にインストールされないことを理解しました。
開始する前に以下を確認してください:
curl-config --configure
出力行の1つは
「--without-ssl」「-with-gnutls」
再コンパイルするには:
最初にカールを削除します。
Sudo apt-get purge curl
Curlに必要なビルドの依存関係をインストールします
Sudo apt-get build-dep curl
最新の(2016年12月20日現在)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サポート:enabled(OpenSSL) ...
Cレベルのlibロケーションキャッシュ(「共有ライブラリキャッシュ」)の問題を解決する
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」
ここではすべてを成功させずに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内の両方で機能しました。
エラー:
ImportError:pycurl:libcurlリンク時sslバックエンド(openssl)はコンパイル時sslバックエンド(none/other)とは異なります
これは私のために働いた、Mac 10.13、python 3.5、pycurl importはこのようにインストールした後に働いた
pip3 uninstall pycurl;
pip3 install --compile --install-option="--with-openssl" pycurl
長い間これにこだわった後、OS X 10.11 El Capitan以降、AppleがOpenSSLヘッダーの組み込みを停止したことがわかりました。直し方?
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
これがvirtualenvで実行されているためかどうかはわかりませんが、CentOS 7ではこれらのソリューションは機能しませんでした。コンパイルしたオブジェクトは、再インストール時にキャッシュディレクトリから取得されていました。ここで他の解決策を試しても同じ問題が発生する場合は、次を試してください。
pip uninstall pycurl
export PYCURL_SSL_LIBRARY=[nss|openssl|ssl|gnutls]
pip install pycurl --no-cache-dir
私はこの問題に遭遇しました Sanket Jagtapの答え 私のために働いた。投票数が最も多い回答を試しましたが、うまくいきませんでした。
私のopensslの古いバージョンは1.0.1tです。opensslを再インストールするとこの問題を解決できると思います。
--- pycurl's openssl backend time....
最新のopensslを再構築し、 this answerを試しました。これをチェックしてください。
pip install --compile --install-option="--with-openssl" pycurl
これは私のために働いた。
試しにopensslを再インストールすることをお勧めします。
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
このリンクは、エラーが発生した理由を要約し、問題を修正するための明確な指示を提供します。
https://cscheng.info/2018/01/26/installing-pycurl-on-macos-high-sierra.html
私にとっては、エルキャプテンからHigh-Sierraにアップグレードしたときに問題が発生しました。
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
Pypiから最新のpycurl-7.43.0.tar.gz(md5)ソースをダウンロードします 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
以下は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