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
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
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
/ usr / local / lib / python3.8 / site-packages / mysql-vendor / libssl.so.1.1
etc. avec LD_PRELOADJ'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