Segfo Python in drei Zeilen

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

Was ist los?

Annahme

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

Kommentar

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

Problemumgehung

  1. Laden Sie / usr / local / lib / python3.8 / site-packages / mysql-vendor / libssl.so.1.1 usw. mit LD_PRELOAD
  2. Verwenden Sie eine frühere Version als 8.0.19.

Nachtrag

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

Segfo Python in drei Zeilen
Segfo Python in 2 Zeilen
Segfo Python in einer Zeile
[Python 3] Primfaktor-Zerlegung in 14 Zeilen
Mach nicht test.py in Python!
Stellen Sie Opencv in Python zur Verfügung
Python-Installation in 2 Zeilen @Windows
Machen Sie die Standardausgabe in Python nicht blockierend
Erstellen Sie mit Python eine GIF-Animation für ASCII-Grafiken
Gefaltetes Liniendiagramm und Skalierungslinie in Python
Lassen Sie uns eine Kombinationsberechnung mit Python durchführen
Stellen Sie sicher, dass in Python regelmäßig Cron-ähnliche Jobs ausgeführt werden
Quadtree in Python --2
CURL in Python
Metaprogrammierung mit Python
Python 3.3 mit Anaconda
Geokodierung in Python
SendKeys in Python
Metaanalyse in Python
Unittest in Python
Zwietracht in Python
DCI in Python
Quicksort in Python
nCr in Python
N-Gramm in Python
Programmieren mit Python
Plink in Python
Konstante in Python
SQLite in Python
Schritt AIC in Python
LINE-Bot [0] in Python
CSV in Python
Reverse Assembler mit Python
Reflexion in Python
Konstante in Python
nCr in Python.
Format in Python
Scons in Python 3
Puyopuyo in Python
Python in Virtualenv
PPAP in Python
Quad-Tree in Python
Reflexion in Python
Chemie mit Python
Hashbar in Python
DirectLiNGAM in Python
LiNGAM in Python
In Python reduzieren
In Python flach drücken
Zeichnen Sie Konturlinien, die in Lehrbüchern erscheinen (Python).
Kopieren Sie die Liste in Python
Mach ein Janken-Spiel in einer Zeile (Python)
Lassen Sie uns einige Beispiele für die Benachrichtigungsverarbeitung in Python erstellen
Machen Sie mit Python eine Joyplot-ähnliche Handlung von R.
So nehmen Sie Python Interpreter-Änderungen in Pycharm vor
Sortierte Liste in Python
Täglicher AtCoder # 36 mit Python
Clustertext in Python
AtCoder # 2 jeden Tag mit Python