ソースからの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
何か案は?
これは最良の答えではないかもしれませんが、この問題の解決方法を共有します。
まず第一に、私の場合、OpenSSLはmake test
はエラーを返しました(その結果Pythonこのエラーが発生しました)。これは、新しいバージョンのPerlをインストールしてからOpenSSLを再インストール(configure、makeなど)することで解決しました。
./configureを使用する前にこのコマンドを使用します
export LD_LIBRARY_PATH =/path/to/openssl/lib:$ LD_LIBRARY_PATH
Configureコマンドで、ライブラリを含めます。
LDFLAGS = "-L/path/to/openssl/lib" ./configure(すべての優先オプション)--with-openssl =/path/to/openssl
明らかに、configureのオプションは、それを必要とするCコンパイラにメッセージを伝えません。
オプション2と3が同時に必要かどうかはわかりませんが、私はそうしましたが、うまくいきました。
これは私がそれを機能させるためにしたことです
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
編集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
の最後に追加されていることを確認し、同様に再起動することもできます。
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
それが役に立てば幸い!