Wie kann ich das kompilieren von Python 3.6.2 auf macOS mit openSSL von homebrew?

Ich versuche zu kompilieren Python 3.6.2 auf macOS 10.11 gemäß den Anweisungen auf https://bugs.python.org/issue29095.

Ich habe homebrew zu installieren Sie openSSL, um den standard-Speicherort, und klicken Hinzugefügt LDFLAGS, CFLAGS und CPPFLAGS auf mein 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

Dann in derselben shell, ich kompilieren von Python, um die benutzerdefinierten Speicherort erforderlich ist für meinen Anwendungsfall:

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

Jedoch das SSL-Modul nicht gebaut werden. Der build-log sagt Folgendes:

Python build erfolgreich abgeschlossen!
Die erforderlichen bits, um diese optionalen Module nicht gefunden wurden:
_gdbm _ssl ossaudiodev

spwd

Die notwendigen bits, Blick in setup.py in detect_modules() für das Modul den Namen.

InformationsquelleAutor iLikeDirt | 2017-09-27



3 Replies
  1. 17

    Keiner der bisherigen Antworten fand ich früher für mich gearbeitet, aber ich habe schließlich doch herausfinden, mit Hilfe eines anderen Antwort nicht erwähnt. Hier war der eigentliche Update:
    https://stackoverflow.com/a/20740964/2934226

    Grundsätzlich, CPPFLAGS und LDFLAGS können nicht in die Umgebung; Sie brauchen, um Sie neben dem configure-Befehl, etwa so:

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

    Und dann nach dem kompilieren und installieren, es funktionierte!

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

    Hier sind die Dinge, die nicht funktioniert hat, und warum:

    Wie kann ich kompilieren von Python 3.4 mit benutzerdefinierten OpenSSL? nicht helfen, weil Sie nicht festlegen können, LDFLAGS, CFLAGS, oder CPPFLAGS in der Umwelt; setup.py nicht geben Sie diese an die eigentliche Zusammenstellung Schritte. Und selbst wenn die Einstellung LD_LIBRARY_PATH funktionieren könnte, wollen Sie nicht zu tun, weil es gefährlich ist (siehe http://xahlee.info/UnixResource_dir/_/ldpath.html). Schließlich –with-ssl ist keine gültige Konfiguration argument, und den patch dort aufgeführten hinzufügen, dass es nicht sauber anwenden.

    Homebrew weigert, einen link OpenSSL nicht gelten, wenn Sie versuchen, etwas zu bauen, von der Quelle, anstatt zu versuchen, um eine eine bereits kompilierte dylib finden Sie eine Bibliothek verlegt. Darüber hinaus, so dass auch symbolische Links in /usr/local ist gefährlich und kann dazu führen, dass Programme kompilieren gegen die neueren Header, sondern mit den älteren system-Binärdateien.

    wie Sie ssl mit python bauen auf MacOS funktioniert nicht richtig. Bearbeiten setup.py hinzufügen der lib-und include-Verzeichnisse, wo Sie installiert habe, meine openSSL teilweise funktioniert, und Sie können kompilieren SSL-Unterstützung. Ach, Sie sind nicht importierbar, da die alte version ist immer noch gewöhnungsbedürftig:

    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 zeigt das problem:

    $ 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 wurde eingeführt in version 1.0.0, nach https://wiki.openssl.org/index.php/Manual:Threads(3)#GESCHICHTE)

    • Beachten Sie, dass Sie bekommen können, die „openSSL installieren, die Lage“ mit brew --prefix openssl, so dass Ihre Kommandozeile kann ./configure CPPFLAGS="-I$(brew --prefix openssl)/include" LDFLAGS="-L$(brew --prefix openssl)/lib"
    • Dies funktioniert nicht nur für Python ist3 installiert, aber auch für python2. (Ich habe versucht, mit 2.7.6)
    • wo ist die ./konfigurieren Sie die Datei befindet
    • Im python-Quellcode-Verzeichnis
  2. 4

    Keine Antwort oben war für mich, für Python 3.8 (derzeit in beta).

    Statt, was für mich gearbeitet (Juli 2019):

    brew install openssl
    ./configure --with-openssl=/usr/local/opt/openssl
    • Dieser arbeitete für mich mit Python 3.7.4.
  3. 2

    Ich Erfolg hatte wie dieser.

      brew update
      brew install openssl
    
      # these were suggested by brew itself.
    
      export LDFLAGS="-L/usr/local/opt/openssl/lib"
      export CPPFLAGS="-I/usr/local/opt/openssl/include"
      export PKG_CONFIG_PATH="/usr/local/opt/openssl/lib/pkgconfig"
    
      # vanilla compilation
    
      ./configure
      make

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.