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


87

pipを使用してvirtualenvにpycurlをインストールしようとしましたが、このエラーが発生しました

ImportError: pycurl: libcurl link-time ssl backend (openssl) is different from compile-time ssl backend (none/other)

「これを修正するには、どのSSLバックエンドが使用されているかをsetup.pyに伝える必要があります」 (ソース)というドキュメントを読みましたが pipを使用してpycurlをインストールしたため、これを行う方法がわかりません。

pipでpycurlをインストールするときにSSLバックエンドを指定するにはどうすればよいですか?

ありがとう


1
あなたのOSは何ですか?
Evgenii 2018年

回答:


121

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

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

    pip uninstall pycurl

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

    export PYCURL_SSL_LIBRARY=openssl

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

    pip install pycurl --no-cache-dir

そこに他の解決策があるかもしれませんが、これは私にとってvirtualenvpipインストールで完全に機能します。


2
おかげで、PYCURL_SSL_LIBRARY=openssl完璧に動作します!
thnee 2014年

以下のためのMac OS Xユーザーの場合:使用することを覚えていないset -x PYCURL_SSL_LIBRARY openssl代わりにexport PYCURL_SSL_LIBRARY=openssl、あなたが使用している場合、魚コンソールの代わりに、bashのを
サージ

13
pip install pycurl --no-cache-dir
Shuguang Yang

ありがとう。私はこの問題に対するいくつかの潜在的な解決策を調べました。このソリューションは初めて機能しました。
マットセッター

ステップバイステップvirtualenvインストール例yippeecode.com/view-code/343QWQT144/…–
helloworld20

77

helloworld2013の答えは正しいですが、重要なのはpycurlが期待しているSSLライブラリと一致していることです。エラーは次のようになります。

pycurl:libcurlリンク時sslバックエンド(<library>)はコンパイル時sslバックエンド(<library>または " none / other ")とは異なります

これを修正するには、pycurlが期待しているライブラリを使用する必要があります。私の場合、エラーは「pycurl:libcurl link-time ssl backend(nss)is different with compile-time ssl backend(openssl)」だったので、修正は次のとおりでした。

pip uninstall pycurl
export PYCURL_SSL_LIBRARY=nss
pip install pycurl

1
鮮やかさ 。これはより多くの票を獲得するはずです。一部のマシンに適用された元の回答。これは、プラットフォームに応じて修正するためのより一般的な方法です。
ニシャント2014年

6
うーん、これはMacではうまくいきませんでした。PYCURL_SSL_LIBRARY完全に無視されているようです。コンパイル時のsslバックエンドは、echo PYCURL_SSL_LIBRARYを与えても、私にとっては常に「(none / other)」ですopenssl
エドワードニューウェル

1
@EdwardNewellのように、この修正はScientific Linux(Rhel)では機能しませんでしたが、PYCURL_SSL_LIBRARYにnssを指定しましたが、バックエンドは残ります(なし/その他)
Yondaime008 2015年

3
Macでは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
eigenein18年

2
これは機能しましたが、次のオプションでのみ機能しました:pip install pycurl --compile --no-cache-dirCentOS7.3の場合。
Robert Yi

51

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

4
はい、MacOS 10.13.1(High Sierra)では、それがトリックになりました!どうもありがとう!opensslを再インストールするには:brew reinstall openssl
Denis Arnaud

1
問題を修正しました。ありがとう:)
JeongjinKim 2017

1
Mac OSX 10.13.4の問題を修正しました!ありがとうございました。
user1192748 2018

1
ありがとうございました!また、私の問題を修正しました。Mac OSX 10.13.4
スティーブンチャーチ

2
ダリルそれを聞いてすみません!Mojaveで再び機能したので、何が起きているのかわかりません。
マイケルウィルソン

25

pip 7.1を使用すると、要件ファイルに次のものを入れることができます。

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

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


1
このソリューションは、varをエクスポートして再インストールするよりも優れています。これは、requirements.txtファイルで共有でき、ユーザーごとに繰り返す必要がないためです。
dfarrell07 2016年

1
CentOS 7ではエクスポートが機能しませんでしたが、グローバルオプションを設定すると機能しました。ありがとう!
アーロングエン

macOSで動作させるには、あなたのソリューションと@MichaelWilsonのソリューションを組み合わせる必要がありました。暗号の問題のように見えます
kip2 2018

20

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
    

2
High Sierraで私のために働いた(virtualenvを使用)。
djangoat

1
はい!また、この記事を参照cscheng.info/2018/01/26/...を
somecallitblues

High Sierra(virtualenvを使用)で動作しましたが、-userフラグを削除する
必要がありました–user495732なぜ私は2018

どうもありがとうございました!!それは信じられないほど役に立ちました。High Sierraを実行し、それに数時間を費やすと、これが機能した唯一のソリューションです:)
Alessandro

私が使用した場合--user、上記のようにフラグを、私が得た:Can not perform a '--user' install. User site-packages are not visible in this virtualenv.
ダリル・スピッツァー

19

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

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

1
easy_installオプションでは、働いていただけでした。なぜこんなに複雑なのかわかりません。必要だったexport PYCURL_SSL_LIBRARY=openssl。私の1つは、コンパイルされたライブラリについて「none / other」と報告しました。
CMCDragonkai 2016年

ちょうどこの問題に遭遇しました、そしてこの解決策は私のために働いた唯一のものでした。
Boudewijn Aasman 2017年

2
私の経験では、pipはOSとともにインストールされた古いバージョンのpucurl(私の場合はCentos7.2)を完全には削除しません。Pipは、以前のバージョンの/usr/lib64/python2.7/site-packages/pycurl.soおよびegg-infoファイルにはアクセスしませんでした。一方、Easy_installは、サイトパッケージにpycurl eggを配置することに加えて、それらを一掃しました。
sokhaty 2017

うーん、上記のすべてを試しましたが、うまくいきませんでした。これは、元のエラーメッセージが `` `ImportError:pycurl:libcurl link-time ssl backend(openssl)is different with compile-time ssl backend(none / other)` ``であったときに機能しました
James McCormac 2017

10

私は何日もこの問題を抱えていました。最後に、ここにある他の回答(主にAlexander Tyapkovのもの)の助けを借りて、AWS ElasticBeanstalkで機能するようにしました。

手動インストール(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の正しいバージョンを使用していることを確認する必要があることに注意してください。そうしないと、Python2.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'

ElasticBeanstalkでDjango1.10を使用してCelery4を構成しようとしたため、この問題が発生しました。それがあなたの場合なら、私はそれについての完全なブログ投稿を書きました


どうもありがとうございました。特にeb設定ファイルは非常に気まぐれで、合理的なエラー(フォーマットの問題を含む)を決して与えないため、これは煩わしい場合があります
Ian

AWS上でpycurlをインストールするとき、それは私に似た問題を解決するために多くのことを助けたとして、私はこの答えをupvoted:stackoverflow.com/questions/51019622/...
グレッグ・ホルスト

8

私はCentOS7を使用しています。上記のすべてを試しましたが、何も機能しませんでした。これらを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を選択しました。エラーメッセージは、どちらを選択するかを示しているはずです。

2019編集:を実行するsudo pip installと、マシンのPythonのシステムインストールで問題が発生する可能性があります。おそらく、Python仮想環境で作業して、そこにパッケージをインストールしてみてください。それがうまくいかない場合、私の答えのsudoトリックはおそらく考慮すべき最後のオプションの1つです。


5

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

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

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


応答に感謝しますが、これは、Imがvirtualenvとpipを介してインストールを行わない場合にのみ機能します
helloworld2013

@Sabujインストールするpycurlを、この優れたウェブサイトで提供インストーラのWindowsの使用1上:lfd.uci.edu/~gohlke/pythonlibs/#pycurl
アダム

4

私はこれをOSXで実行していますが、上記のソリューションのいくつかが機能していませんでした。エドワード・ニューウェルのコメントと同様に、PYCURL_SSL_LIBRARY変数は完全に無視されたようです。PycURLインストールドキュメントを
さらに読むと、次のことが明らかになりました。

pipは、新しく指定されたオプションを使用してpycurlを再コンパイルする代わりに、以前にコンパイルしたパッケージを再インストールする場合があります。

したがって、私はそれを強制的にコンパイルする必要がありました:

pip install --compile pycurl

それは多くの場合に機能します。ただし、変数を無視し続けるいくつかのシステムに遭遇したため、maharg101の回答と同様に、pipを介して次のように設定できるインストールオプションを使用しました。

pip install pycurl --global-option="--with-[ssl|gnutls|nss]"

ここで、角括弧内の3つのオプションのいずれかを選択します。使用可能なオプションはでsslあり、ではない ことに注意してくださいopenssl。指定する--with-opensslとエラーが発生します。また、PYCURL_SSL_LIBRARY変数をいじってファンキーな値に切り替えて何が起こるかを確認した場合、この最後のコマンドは間違いなく変数をキャッチし、値が設定されているが有効でない場合はエラーをスローすることに注意してください。


1
最初にpycurlをアンインストールし pip install pycurl --global-option="--with-nss"て、私のために動作します。記録のために、私のエラーはImportError: pycurl: libcurl link-time ssl backend (nss) is different from compile-time ssl backend (openssl)
ahyong 2015年

おかげで@ahyongグローバルオプショントリックは私のために働いた、私はtarからインストールしている間に試したが、それはpipで働いたが、setup.py奇妙ではなかった...
Yondaime008 2015

4

カールの再インストール

私はこの議論からすべての提案を試みましたが、誰も私のために働きませんでした。解決策として、curlとcurlibを再インストールしました。その後、環境内にSSLサポート付きのpycurlをインストールすることができました。

開始時:

'PycURL / 7.43.0 libcurl / 7.47.0 GnuTLS / 3.4.10 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オプションを使用して再インストールすることです。

また、以下を使用してpycurlをpipで再コンパイルしようとしました。

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サポート: 有効(OpenSSL) .. ..

経営幹部レベルのライブラリロケーションキャッシュ(「共有ライブラリキャッシュ」)の問題を解決します

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'


3

macOSMojaveのPyCharmCE内で問題が発生した場合、これがvenvで機能するようにした方法です。

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

PyCharmプロジェクトインタープリターのスクリーンショット


1
macOS Mojaveを使用している場合は、brew restart opensslを実行してから、pip install pycurl == 7.43.0.1 --install-option = -with-openssl --install-option = -openssl-dir = / usr / local /を実行する必要がありました。 OPT / opensslの
user495732なぜ

2

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

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


2

ここですべてをmacOS10.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内の両方で機能しました。


1

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

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

ここでも同じですが、CentOS 7では、--no-cahe-dirオプションを追加するまで機能しませんでした。su -@alfonsoが提案したように、rootの下での実行にのみ成功したことをさらに言及したいと思います。やることsudo pip3 ...は十分ではありませんでした。おそらく、環境変数を取得するために必要です。
nagev 2017年

1

エラー:

ImportError:pycurl:libcurlリンク時sslバックエンド(openssl)がコンパイル時sslバックエンド(なし/その他)と異なります

これは私のために働いた、Mac 10.13、python 3.5、pycurlインポートはこのようにインストールした後に働いた

pip3 uninstall pycurl;

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

これは、HighSierraのPython2.7.10でも機能しました。
スカイラー2017

1

長い間これに固執した後、私はAppleがOS X 10.11 ElCapitan以降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

amazonlinuxで同じ問題-解決しました
amazonlinuxに基づいてDockerイメージを作成し、python3.7をインストールし、pycurlモジュールを追加するときにこの問題が発生しました。pycurlを除いて、他のすべてのpythonモジュールは正しくインストールされました。この問題に関連するスレッドで提案された解決策の多くを試した後、すべてのピースをインストールするために次のコマンドを使用して、最終的に問題を解決しました。
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をインストールすると、2番目のpip3コマンドで使用されるグローバルオプションを使用するという私の場合の問題が解決しました。


0

Python2.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.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

0
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

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

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

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

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

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

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

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


0

以下はPython3.6で私のために働いた

MacOSHigh-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

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

0

最近、Djangoプロジェクトをアップグレードしているときに、同様のエラーが発生しました。しかし、今回は環境変数の設定が機能しませんでした。そのため、環境変数を設定しexport PYCURL_SSL_LIBRARY=opensslてフラグを渡す必要がありました--global-option="with-openssl"

元の回答はこのページに投稿されました


-1
export CPPFLAGS=-I/usr/local/opt/openssl/include
export LDFLAGS=-L/usr/local/opt/openssl/lib

pip install pycurl --global-option="--with-openssl"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.