update mac instalar python macos compilation openssl

instalar - uninstall python mac



¿Cómo puedo compilar Python 3.6.2 en macOS con openSSL desde homebrew? (1)

Estoy intentando compilar Python 3.6.2 en macOS 10.11 de acuerdo con las instrucciones en https://bugs.python.org/issue29095 .

He usado homebrew para instalar openSSL en la ubicación estándar y luego agregué LDFLAGS, CFLAGS y CPPFLAGS a mi 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

Luego, en ese mismo shell, compilo Python en la ubicación personalizada requerida para mi caso de uso:

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

Sin embargo, el módulo SSL no se construye. El registro de compilación dice esto:

¡La construcción de Python terminó con éxito! No se encontraron los bits necesarios para compilar estos módulos opcionales: _gdbm _ssl ossaudiodev
spwd
Para encontrar los bits necesarios, busque en setup.py en detect_modules () el nombre del módulo.


Ninguna de las respuestas anteriores que encontré anteriormente funcionó para mí, pero finalmente lo resolví con la ayuda de otra respuesta que no se mencionó anteriormente. Aquí estaba la solución real: https://.com/a/20740964/2934226

Básicamente, CPPFLAGS y LDFLAGS no se pueden establecer en el entorno; necesitas configurarlos junto con el comando de configuración, así:

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

Y luego de compilar e instalar, ¡funcionó!

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

Aquí están las cosas que no funcionaron, y por qué:

¿Cómo compilo Python 3.4 con OpenSSL personalizado? no ayuda porque no puede establecer LDFLAGS, CFLAGS o CPPFLAGS en el entorno; setup.py no los transfiere a los pasos de compilación reales. E incluso si la configuración de LD_LIBRARY_PATH podría funcionar, no desea hacer eso porque es peligroso (consulte http://xahlee.info/UnixResource_dir/_/ldpath.html ). Finalmente, --with-ssl no es un argumento de configuración válido, y el parche allí enumerado para agregarlo no se aplica limpiamente.

Homebrew que se niega a vincular OpenSSL no se aplica cuando intenta crear algo desde el origen, en lugar de tratar de obtener un archivo dylib ya compilado para encontrar una biblioteca reubicada. Además, hacer enlaces simbólicos en / usr / local es peligroso y puede hacer que los programas se compilen contra los encabezados más nuevos, pero usan los binarios del sistema anterior.

cómo incluir ssl con python build en MacOS no funciona correctamente. Editando setup.py para agregar lib e incluir directorios donde instaló mi openSSL funciona parcialmente , y le permite compilar en soporte SSL. Por desgracia, no son importables porque la versión anterior todavía se está utilizando:

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 muestra el problema:

$ 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 se introdujo en la versión 1.0.0, según https://wiki.openssl.org/index.php/Manual:Threads(3)#HISTORY )