web-dev-qa-db-ja.com

Python 3.7.1-SSLモジュールが失敗しました

ソースからのPython 3.7をビルドすると、次のエラーが発生します。

Failed to build these modules:
_hashlib              _ssl                                     

Could not build the ssl module!
Python requires an OpenSSL 1.0.2 or 1.1 compatible libssl with X509_VERIFY_PARAM_set1_Host().
LibreSSL 2.6.4 and earlier do not provide the necessary APIs, https://github.com/libressl-portable/portable/issues/381

他のstackoverflow-questionsから非常に多くの回避策を試しましたが、うまくいきません。ソースから最新のOpenSSLとLibreSSLを構築します。 OpenSSLパスは、「/ usr/local/ssl」バージョンOpenSSL 1.0.2pです。

./configure --with-openssl=/usr/local/ssl/
(./configure CPPFLAGS="-I/usr/local/ssl/include" LDFLAGS="-L/usr/local/ssl/lib")
make 
make altinstall

私のシステム:Ubuntu 12.04.5 LTS

何か案は?

10
mcatis

これは最良の答えではないかもしれませんが、この問題の解決方法を共有します。

  1. まず第一に、私の場合、OpenSSLはmake testはエラーを返しました(その結果Pythonこのエラーが発生しました)。これは、新しいバージョンのPerlをインストールしてからOpenSSLを再インストール(configure、makeなど)することで解決しました。

  2. ./configureを使用する前にこのコマンドを使用します

    export LD_LIBRARY_PATH =/path/to/openssl/lib:$ LD_LIBRARY_PATH

  3. Configureコマンドで、ライブラリを含めます。

    LDFLAGS = "-L/path/to/openssl/lib" ./configure(すべての優先オプション)--with-openssl =/path/to/openssl

    明らかに、configureのオプションは、それを必要とするCコンパイラにメッセージを伝えません。

オプション2と3が同時に必要かどうかはわかりませんが、私はそうしましたが、うまくいきました。

3
Simon Klaver

これは私がそれを機能させるためにしたことです

brew reinstall openssl

brew unlink openssl && brew link openssl --force

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

  echo 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.bash_profile

次に、python tarballをダウンロードして、これを行います

tar xvf Python-3.7.2.tar
cd Python-3.7.2
  ./configure CPPFLAGS="-I/usr/local/opt/openssl/include" LDFLAGS="-L/usr/local/opt/openssl/lib" --prefix=$PWD/Python-3.7.2/mybuild --enable-optimizations
0
Jagat

編集setup.py

次の行を見つけます。

        system_lib_dirs = ['/lib64', '/usr/lib64', '/lib', '/usr/lib']
    system_include_dirs = ['/usr/include']

...各フォルダをそれぞれのリストの先頭に配置します。


私の場合、次を追加する必要がありました:/usr/local/libおよび/usr/local/include

        system_lib_dirs = ['/usr/local/lib', '/lib64', '/usr/lib64', '/lib', '/usr/lib']
    system_include_dirs = ['/usr/local/include', '/usr/include']

最後に:make distclean && ./configure

export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH(またはあなたが持っているもの)が/etc/profileの最後に追加されていることを確認し、同様に再起動することもできます。

0
veganaiZe

this blog。 with python 3.7.4 openssl 1.1.0 centOS 6。

ここに要約があります:

まず、いくつかの前提条件:

Sudo apt-get install build-essential checkinstall libreadline-gplv2-dev libncursesw5-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev

centOS Linuxを使用している場合、apt-getの代わりにyumを使用します。

Ssl 1.0.2以降をインストールします。

    cd /usr/src
    curl https://www.openssl.org/source/openssl-1.0.2o.tar.gz | tar xz
    cd openssl-1.0.2o
    ./config shared --prefix=/usr/local/
    Sudo make
    Sudo make install

/usr/src/openssl-1.0.2oをPython configureスクリプトに渡す必要があります。

mkdir lib
cp ./*.{so,so.1.0.0,a,pc} ./lib

Pythonのインストールに進みます。

    cd /usr/src
    Sudo wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz
    Sudo tar xzf Python-3.7.0.tgz
    cd Python-3.7.0
    ./configure --with-openssl=/usr/src/openssl-1.0.2o --enable-optimizations
    Sudo make
    Sudo make altinstall

テストするには、python3.7を実行して入力します。

import ssl
ssl.OPENSSL_VERSION

それが役に立てば幸い!

0
Sunil Kumar