python - 開発環境 - upgrade openssl brew



homebrewからopenSSLを使ってmacOSでPython 3.6.2をコンパイルするにはどうすればいいですか? (1)

私はhttps://bugs.python.org/issue29095の指示に従って、macOS 10.11でPython 3.6.2をコンパイルしようとしています

私はhomebrewを使ってopenSSLを標準の場所にインストールしてから、LDFLAGS、CFLAGS、およびCPPFLAGSをenv:

$ printenv | grep FLAGS
LDFLAGS=/usr/local/Cellar/openssl/1.0.2l/lib/
CFLAGS=-I/usr/local/Cellar/openssl/1.0.2l/include/openssl
CPPFLAGS=-I/usr/local/Cellar/openssl/1.0.2l/include/openssl

同じシェルで、Pythonを私のユースケースに必要なカスタム位置にコンパイルします:

$ sudo ./configure --prefix=/oebuild/python/python-3.6.1
$ sudo make
$ sudo make install

ただし、SSLモジュールは構築されません。 ビルドログには、

Pythonビルドが正常に終了しました! これらのオプションモジュールを構築するのに必要なビットは見つかりませんでした:_gdbm _ssl ossaudiodev
spwd
必要なビットを見つけるには、モジュールの名前については、detect_modules()のsetup.pyを参照してください。


私が以前に見つけた以前の回答はどれも私のために働いたことはありませんでしたが、私は結局前に言及しなかった別の答えの助けを借りてこれを理解しました。 ここに実際の修正がありました: https : //.com/a/20740964/2934226

基本的に、CPPFLAGSとLDFLAGSは環境内で設定することはできません。 次のようにconfigureコマンドの横にそれらを設定する必要があります:

./configure CPPFLAGS="-I[openSSL install location]/include" LDFLAGS="-L[openSSL install location]/lib" [other flags here]

そして、コンパイルしてインストールした後、うまくいった!

$ python3 -c "import ssl; print(ssl.OPENSSL_VERSION)"
OpenSSL 1.0.2l  25 May 2017

ここではうまくいかなかったことがあります。その理由は次のとおりです。

カスタムOpenSSLでPython 3.4をコンパイルするにはどうすればよいですか? 環境内でLDFLAGS、CFLAGS、またはCPPFLAGSを設定できないために役立ちません。 setup.pyは実際のコンパイルステップに渡しません。 LD_LIBRARY_PATHの設定が有効な場合でも、危険なので実行する必要はありません( http://xahlee.info/UnixResource_dir/_/ldpath.htmlを参照)。 最後に、--with-sslは有効なconfigure引数ではなく、追加するためにそこにリストされているパッチは完全には適用されません。

自作のライブラリを見つけるためにすでにコンパイルされたdylibを入手しようとするのではなく、ソースから何かを構築しようとしているときに、OpenBSSL をリンクすることを拒否する自作自治体は当てはまりません。 さらに、/ usr / localにシンボリックリンクを作成することは危険で、プログラムは新しいヘッダに対してコンパイルすることができますが、古いシステムバイナリを使用する可能性があります。

MacOSでPythonビルドを使ってsslを組み込む方法が正しく動作しません。 setup.pyを編集して、openSSLをインストールした場所のlibディレクトリとincludeディレクトリを部分的に動作させ、SSLサポートでコンパイルできます。 ああ、古いバージョンはまだ使用されているため、インポートできません。

Following modules built successfully but were removed because they could not be imported:
_hashlib              _ssl                                    

[...]

building '_ssl' extension
gcc -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -std=c99 -Wextra -Wno-unused-result -Wno-unused-parameter -Wno-missing-field-initializers -I/usr/local/opt/openssl/include/ -I./Include -I/oebuild/python/python-3.6.1/include -I. -I/usr/local/include -I/oebuild/python/src/Python-3.6.1/Include -I/oebuild/python/src/Python-3.6.1 -c /oebuild/python/src/Python-3.6.1/Modules/_ssl.c -o build/temp.macosx-10.11-x86_64-3.6/oebuild/python/src/Python-3.6.1/Modules/_ssl.o
gcc -bundle -undefined dynamic_lookup build/temp.macosx-10.11-x86_64-3.6/oebuild/python/src/Python-3.6.1/Modules/_ssl.o -L/oebuild/python/python-3.6.1/lib -L/usr/local/lib -lssl -lcrypto -o build/lib.macosx-10.11-x86_64-3.6/_ssl.cpython-36m-darwin.so
building '_hashlib' extension
gcc -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -std=c99 -Wextra -Wno-unused-result -Wno-unused-parameter -Wno-missing-field-initializers -I/usr/local/opt/openssl/include/ -I./Include -I/oebuild/python/python-3.6.1/include -I. -I/usr/local/include -I/oebuild/python/src/Python-3.6.1/Include -I/oebuild/python/src/Python-3.6.1 -c /oebuild/python/src/Python-3.6.1/Modules/_hashopenssl.c -o build/temp.macosx-10.11-x86_64-3.6/oebuild/python/src/Python-3.6.1/Modules/_hashopenssl.o
gcc -bundle -undefined dynamic_lookup build/temp.macosx-10.11-x86_64-3.6/oebuild/python/src/Python-3.6.1/Modules/_hashopenssl.o -L/oebuild/python/python-3.6.1/lib -L/usr/local/lib -lssl -lcrypto -o build/lib.macosx-10.11-x86_64-3.6/_hashlib.cpython-36m-darwin.so
*** WARNING: renaming "_ssl" since importing it failed: dlopen(build/lib.macosx-10.11-x86_64-3.6/_ssl.cpython-36m-darwin.so, 2): Symbol not found: _CRYPTO_THREADID_set_callback
  Referenced from: build/lib.macosx-10.11-x86_64-3.6/_ssl.cpython-36m-darwin.so
  Expected in: flat namespace
 in build/lib.macosx-10.11-x86_64-3.6/_ssl.cpython-36m-darwin.so
*** WARNING: renaming "_hashlib" since importing it failed: dlopen(build/lib.macosx-10.11-x86_64-3.6/_hashlib.cpython-36m-darwin.so, 2): Symbol not found: _HMAC_CTX_copy
  Referenced from: build/lib.macosx-10.11-x86_64-3.6/_hashlib.cpython-36m-darwin.so
  Expected in: flat namespace
 in build/lib.macosx-10.11-x86_64-3.6/_hashlib.cpython-36m-darwin.so

otool -Lは問題を示しています:

$ otool -L build/lib.macosx-10.11-x86_64-3.6/_ssl.cpython-36m-darwin_failed.so 
build/lib.macosx-10.11-x86_64-3.6/_ssl.cpython-36m-darwin_failed.so:
    /usr/lib/libssl.0.9.8.dylib (compatibility version 0.9.8, current version 0.9.8)
    /usr/lib/libcrypto.0.9.8.dylib (compatibility version 0.9.8, current version 0.9.8)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1226.10.1)

(CRYPTO_THREADIDは、 https: //wiki.openssl.org/index.php/Manual:Threads(3)#HISTORYによると、バージョン1.0.0で導入されました)





openssl