web-dev-qa-db-ja.com

OpenSSL使用時のSSLバックエンドエラー

私は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バックエンドを指定するにはどうすればよいですか?

ありがとう

79
helloworld2013

INSTALLATIONファイルを読んだ後、環境変数を設定して問題を解決し、再インストールしました

  • 既存のpycurlインストールを削除します

    pip uninstall pycurl

  • リンク時SSLバックエンド(上記のopenssl)で変数をエクスポートします

    export PYCURL_SSL_LIBRARY=openssl

  • 次に、キャッシュなしpycurlを再インストールします

    pip install pycurl --no-cache-dir

他にも解決策はありますが、virtualenvおよびpipのインストールではこれは完璧に機能します。

110
helloworld2013

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
70
DrStrangepork

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
49
Michael Wilson

Pip 7.1を使用すると、要件ファイルに以下を含めることができます。

pycurl==7.19.5.1 --global-option="--with-nss"

Nssを関連するsslバックエンドライブラリに置き換えるだけです。

23
maharg101

これは私のために働いた:

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
19
JoelBondurant

Mac OS High Sierraアップデート後にpycurlを修正する方法:

  1. SecureTransportの代わりにOpenSSLを使用するためにcurlライブラリを再インストールします

    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
    
17
pallly

私は何日もこの問題を抱えていました。最後に、他の回答(主に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を構成しようとしたため、この問題が発生しました。それがあなたの場合、 私はそれについての完全なブログ記事を書きました

9
Diego Jancic

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を選択しました。エラーメッセージから、どの選択を行うべきかがわかります。

8
alfonso

Tar.gzファイルは here からダウンロードできます。次に、それをフォルダに抽出します。そこにsetup.pyファイルがあります。サイトが言及したコマンドをそこで実行します。例えば:

python setup.py --with-[ssl|gnutls|nss] install

参考:pycurlをWindowsにインストールしようとしましたが、できませんでした。しかし、私のLinuxでそれをしました。

5
Sabuj Hassan

これを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変数をいじってファンキーな値に切り替えて何が起こるかを確認する場合、この最後のコマンドは値を設定しても有効ではない場合、間違いなくキャッチしてエラーをスローすることに注意してください。

4
Gunga

これは私のために働いた:

pip install --compile --install-option = "-with-openssl" pycurl

2
user10148784

Curlの再インストール

私はこの議論からあらゆる提案を試みましたが、誰も私のために働きませんでした。解決策として、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」

2

ここではすべてを成功させずに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内の両方で機能しました。

2
Daryl Spitzer

MacOS MojaveのPyCharm CE内で問題が発生している人にとっては、これがvenvでの動作の仕方です。

  • バージョンを指定:7.43.0.1
  • オプション:--install-option =-with-openssl --install-option =-openssl-dir =/usr/local/opt/openssl

PyCharm Project Interpreter screen shot

2
fabe

エラー:

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
1
vairav

長い間これにこだわった後、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
1
Whitebear

これがvirtualenvで実行されているためかどうかはわかりませんが、CentOS 7ではこれらのソリューションは機能しませんでした。コンパイルしたオブジェクトは、再インストール時にキャッシュディレクトリから取得されていました。ここで他の解決策を試しても同じ問題が発生する場合は、次を試してください。

pip uninstall pycurl
export PYCURL_SSL_LIBRARY=[nss|openssl|ssl|gnutls]
pip install pycurl --no-cache-dir
1
Robert Kelly

私はこの問題に遭遇しました Sanket Jagtapの答え 私のために働いた。投票数が最も多い回答を試しましたが、うまくいきませんでした。

私のopensslの古いバージョンは1.0.1tです。opensslを再インストールするとこの問題を解決できると思います。

--- pycurl's openssl backend time....

最新のopensslを再構築し、 this answerを試しました。これをチェックしてください。

pip install --compile --install-option="--with-openssl" pycurl

これは私のために働いた。

試しにopensslを再インストールすることをお勧めします。

0
F.allen
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
0
Sanket Jagtap

このリンクは、エラーが発生した理由を要約し、問題を修正するための明確な指示を提供します。

https://cscheng.info/2018/01/26/installing-pycurl-on-macos-high-sierra.html

私にとっては、エルキャプテンからHigh-Sierraにアップグレードしたときに問題が発生しました。

0
hyukkyulee

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)[email protected]:~/Downloads/pycurl-7.43.0$ python setup.py --with-openssl install
0

以下は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
0
Samuel