Segfo python en trois lignes

Je pense que c'est probablement le plus rapide.

$ docker run -ti python:3.8-slim bash
# pip install mysql-connector-python==8.0.20
# python
>>> import random
>>> import mysql.connector
Segmentation fault

Qu'est-ce qui se passe?

supposition

mysql-connector-python regroupe désormais libcrypto.so.1.1 et libssl.so.1.1 de 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

Commentaire

import random

Importer des charges aléatoires libcrypto.so.1.1. À ce stade, chargez libcrypto.so.1.1` installé sur le système.

import mysql.connector

Cette instruction d'importation tente de charger libssl.so.1.1 et libcrypto.so.1.1. À ce moment-là, libssl.so.1.1 charge son propre paquet, libcrypto.so.1.1 est déjà chargé et ne sera pas chargé.

Par conséquent, la situation est la suivante.

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

Il y a une erreur de segmentation car libcrypto.so.1.1 est incompatible.

Il a déjà été signalé comme un bogue. https://bugs.mysql.com/bug.php?id=97220

solution de contournement

  1. Chargez / usr / local / lib / python3.8 / site-packages / mysql-vendor / libssl.so.1.1 etc. avec LD_PRELOAD
  2. Utilisez une version antérieure à «8.0.19».

Postscript

J'ai trouvé qu'il n'était pas nécessaire de lire au hasard séparément.

>>> import mysql.connector
Segmentation Fault

Le raisonnement ci-dessus ne peut pas être expliqué un peu, il semble donc y avoir une autre cause. Je suis sûr qu'il y a quelque chose qui ne va pas avec l'ordre de chargement dans la bibliothèque fournie, car cela peut être évité avec LD_PRELOAD.

Au fait, étrangement, cela se produit dans l'image python: 3.8-slim, mais pas dans l'image python: 3.8.

Recommended Posts

Segfo python en trois lignes
Segfo python en 2 lignes
Segfo python en une ligne
[Python 3] Décomposition des facteurs premiers en 14 lignes
Ne faites pas test.py en Python!
Rendre Opencv disponible en Python
Installation de Python en 2 lignes @Windows
Rendre la sortie standard non bloquante en Python
Créer une animation GIF d'art ASCII avec Python
Graphique à lignes pliées et ligne d'échelle en python
Faisons un calcul de combinaison avec Python
Exécuter régulièrement des tâches de type cron en Python
Quadtree en Python --2
CURL en Python
Métaprogrammation avec Python
Python 3.3 avec Anaconda
Géocodage en python
SendKeys en Python
Méta-analyse en Python
Unittest en Python
Discord en Python
DCI en Python
tri rapide en python
nCr en python
N-Gram en Python
Programmation avec Python
Plink en Python
Constante en Python
Sqlite en Python
Étape AIC en Python
LINE-Bot [0] en Python
CSV en Python
Assemblage inversé avec Python
Réflexion en Python
Constante en Python
nCr en Python.
format en python
Scons en Python 3
Puyopuyo en python
python dans virtualenv
PPAP en Python
Quad-tree en Python
Réflexion en Python
Chimie avec Python
Hashable en Python
DirectLiNGAM en Python
LiNGAM en Python
Aplatir en Python
Aplatir en python
Dessiner des lignes de contour qui apparaissent dans les manuels (Python)
Copiez la liste en Python
Créez un jeu Janken en une seule ligne (python)
Faisons quelques exemples de traitement des notifications en Python
Créez un tracé de R semblable à un joyplot avec python
Comment apporter des modifications à l'interpréteur Python dans Pycharm
Liste triée en Python
AtCoder # 36 quotidien avec Python
Texte de cluster en Python
AtCoder # 2 tous les jours avec Python