Ich denke, das ist wahrscheinlich das schnellste.
$ docker run -ti python:3.8-slim bash
# pip install mysql-connector-python==8.0.20
# python
>>> import random
>>> import mysql.connector
Segmentation fault
mysql-connector-python bündelt jetzt libcrypto.so.1.1
und libssl.so.1.1
von 8.0.20
.
$ pip show -f mysql-connector-python | grep lib
Location: /usr/local/lib/python3.8/site-packages
mysql-vendor/libcrypto.so.1.1
mysql-vendor/libssl.so.1.1
import random
Das Importieren von "zufälligen" Ladevorgängen "libcrypto.so.1.1". Laden Sie zu diesem Zeitpunkt "libcrypto.so.1.1", das auf dem System installiert ist.
import mysql.connector
Diese Importanweisung versucht, "libssl.so.1.1" und "libcrypto.so.1.1" zu laden.
Zu diesem Zeitpunkt lädt libssl.so.1.1
sein eigenes gebündeltes,
libcrypto.so.1.1 ist bereits geladen und wird nicht geladen.
Daher ist die Situation wie folgt.
libcrypto.so.1.1 --> /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1
libssl.so.1.1 --> /usr/local/lib/python3.8/site-packages/mysql-vendor/libssl.so.1.1
Es liegt ein Segmentierungsfehler vor, da libcrypto.so.1.1 nicht kompatibel ist.
Es wurde bereits als Fehler gemeldet. https://bugs.mysql.com/bug.php?id=97220
/ usr / local / lib / python3.8 / site-packages / mysql-vendor / libssl.so.1.1
usw. mit LD_PRELOAD8.0.19
.Ich fand, dass es nicht zufällig separat gelesen werden muss.
>>> import mysql.connector
Segmentation Fault
Die obige Argumentation kann nicht ein wenig erklärt werden, daher scheint es eine andere Ursache zu geben. Ich denke, es ist sicher, dass etwas mit der Ladereihenfolge in der gebündelten Bibliothek nicht stimmt, da dies mit LD_PRELOAD vermieden werden kann.
Seltsamerweise passiert es im Bild "Python: 3.8-slim", aber nicht im Bild "Python: 3.8".
Recommended Posts