Partage
  • Partager sur Facebook
  • Partager sur Twitter

Utilisation de mysql.connector sur un serveur

    21 décembre 2021 à 11:02:41

    Bonjour à tous,

    Je souhaite mettre en ligne une page PHP qui lance un script python pouvoir afficher un graphique à partir des données de la base MySQL.

    Je sauvegarde le graphique généré avec matplotlib en image .PNG et je l'affiche avec ma page PHP ... Mais rien ne s'affiche !

    J'ai mis un place des codes simplifiés pour tester en localhost sur mon serveur Apache :

    Le code php :

    <?php 
    $outputs = shell_exec("sudo python3 test.py");
    var_dump($outputs);
    ?>

    Le code python test.py (sans l'accès à la base pour l'instant, juste pour voir) :

    #!/usr/bin/env python
    
    try:
        import mysql.connector
        print(" ok ! ")
    
    except:
        print(" No. ")
    

    La sortie affichée est " No. ", j'en déduis que la ligne

    import mysql.connector

    Ne fonctionne pas : le programme python ne trouve pas la lib pourtant bien installée sur ma machine...

    Je précise que :

    • Le code python s'exécute correctement directement à partir d'un terminal, sur ma machine, ou directement sur le serveur.
    • Le programme test.py est bien exécutable
    • J'ai testé exec( ) et system( ), mais sans succès.
    • Pas de problème avec matplotlib, j'y accède sur le serveur, le pb est bien sur mysql.connector
    Peut-être que cela vient du shebang   ... ? Je sèche... si quelqu'un a une idée, je suis preneur ^^
    Merci d'avance,
    Eric
    Xubuntu 20.01
    Python 3.8
    • Partager sur Facebook
    • Partager sur Twitter
      21 décembre 2021 à 14:00:00

      Déjà le #!/usr/bin/env python lance un Python V2 alors que sudo python3 test.py utilise Python V3.
      • Partager sur Facebook
      • Partager sur Twitter
        22 décembre 2021 à 8:45:47

        Oui, tu as raison  ! Merci mps ^^

        Je viens de tester :

        #!/usr/bin/env python3

        Mais le script bloque toujours à    import mysql.connector


        Alors que si je change de lib :

        #!/usr/bin/env python3
         
        try:
            import matplotlib
            print(" ok ! ")
         
        except:
            print(" No. ")


        Me renvoie bien " ok ! " comme attendu... Une histoire de chemin vers la lib ... ?


        Eric

        Xubuntu 20.01

        Python 3.8






        -
        Edité par EricDal Degan 22 décembre 2021 à 8:49:11

        • Partager sur Facebook
        • Partager sur Twitter
          22 décembre 2021 à 11:25:58

          retirer le try/except pour afficher le message d'erreur; ça pourrait aider à avancer
          • Partager sur Facebook
          • Partager sur Twitter
            22 décembre 2021 à 12:16:46

            Je comprends, mais il n'y a pas de message d'erreur affiché sur ma page PHP.

            Et lorsque je lance le script via le terminal sur le serveur, il n'y a pas d'erreur... !

            • Partager sur Facebook
            • Partager sur Twitter
              22 décembre 2021 à 12:35:08

              dans le except (puisque visiblement on y passe), alors afficher le message d'erreur

              #!/usr/bin/env python3
                
              try:
                  import matplotlib
                  print(" ok ! ")
                
              except Exception as e:
                  print(e)



              • Partager sur Facebook
              • Partager sur Twitter
                22 décembre 2021 à 13:20:13

                Ok, merci je ne voyais pas comment faire.

                Donc pour le code :

                #!/usr/bin/env python3
                try:
                    import mysql.connector
                except Exception as e:
                    print(e)


                J'ai le message d'erreur qui s'affiche sur ma page PHP :

                No module named 'mysql' 

                Il y a bien un soucis de lib non installée... ?

                Pour continuer l'investigation, lorsque je lance depuis un terminal directement sur le serveur :

                daldolg@daldolg:/var/www/html/www.tp_films$ sudo python3 test.py
                No module named 'mysql'

                J'ai bien une erreur qui remonte.

                Et lorsque je ne mets pas le "sudo" :

                daldolg@daldolg:/var/www/html/www.tp_films$  python3 test.py
                

                Là, il n'y a pas d'erreur !!

                -
                Edité par EricDal Degan 22 décembre 2021 à 13:25:35

                • Partager sur Facebook
                • Partager sur Twitter
                  22 décembre 2021 à 15:10:07

                  Du coup, si tu retires le sudo dans ton script php, ça fonctionne ?
                  • Partager sur Facebook
                  • Partager sur Twitter
                    23 décembre 2021 à 14:50:27

                    Non, dans le script PHP en retirant le sudo, cela me donne la même erreur :

                    No module named 'mysql'


                    • Partager sur Facebook
                    • Partager sur Twitter
                      23 décembre 2021 à 15:00:43

                      A priori, vous avez plusieurs environnements Python différents une dans lequel mysql a été installé et un autre sans.

                      Dans un petit script essayez d'avoir la sortie de ces lignes:

                      import sys
                      print (sys.prefix)
                      ça va afficher le répertoire principal de chaque environnement Python et, à priori, ils devraient être différents.

                      • Partager sur Facebook
                      • Partager sur Twitter
                        3 janvier 2022 à 7:41:45

                        Je viens de tester, à la fois sur mon bureau et sur le serveur Apache, et j'ai la même sortie :

                        >>> import sys
                        >>> print(sys.prefix)
                        /usr
                        

                        Dans ce dossier  /usr/lib/  j'ai les dossier python suivants :

                        Dans /usr/lib/python3/dist-packages/  je n'ai pas 'mysql-connector'  alors qu'il devrait y être, non ?... est-ce que cela peut venir de là ?

                        • Partager sur Facebook
                        • Partager sur Twitter
                        Anonyme
                          3 janvier 2022 à 9:09:05

                          Salut,

                          As-tu essayé de réinstaller mysql-connector ?

                          pip3 install mysql-connector



                          • Partager sur Facebook
                          • Partager sur Twitter
                            3 janvier 2022 à 15:27:42

                            EricDal Degan a écrit:

                            Dans /usr/lib/python3/dist-packages/  je n'ai pas 'mysql-connector'  alors qu'il devrait y être, non ?... est-ce que cela peut venir de là ?

                            C'est là qu'on s'attend à le trouver si le package a été installé par pip. Mais sur Linux les packages viennent aussi avec la distro et je ne sais pas comment ils sont intégrés (il n'est pas obligatoire de les poser dans dist-packages).

                            Si vous en avez marre de tourner en rond, installez le packages avec pip et la commande "sudo python3 -m pip install mysql-connector-python".

                            Sinon ajoutez (dans le programme de tests qui plante avec sudo et pas lancé normalement):

                            #!/usr/bin/env python3
                            import sys
                            print(sys.path)
                            try:
                                import mysql.connector
                            except Exception as e:
                                print(e)

                            pour voir s'il y a des différences côté où Python va chercher les packages.

                            • Partager sur Facebook
                            • Partager sur Twitter
                            Anonyme
                              4 janvier 2022 à 18:09:00

                              Salut,

                              Du coup j'ai un gros doute, car il existe 2 versions:

                              mysql-connector-python v8.0.27
                              mysql-connector v2.2.9

                              Quelqu'un connait la différence ?

                              -
                              Edité par Anonyme 4 janvier 2022 à 18:09:37

                              • Partager sur Facebook
                              • Partager sur Twitter
                                4 janvier 2022 à 18:17:49

                                sur la page pypi de mysql-connector (https://pypi.org/project/mysql-connector/ ), il est indiqué qu'elle est déprécié et qu'il faut plutôt utilisé mysql-connector-pyton (https://pypi.org/project/mysql-connector-python/ )
                                • Partager sur Facebook
                                • Partager sur Twitter
                                Anonyme
                                  4 janvier 2022 à 18:26:17

                                  Merci @umfred, c'est vrai que j'aurais pu aller voir ça moi-même :euh: mais j'ai encore le cerveau embrumé suite aux fêtes :)

                                  D'ailleurs bonne et heureuse année 2022 à tous :magicien:

                                  -
                                  Edité par Anonyme 4 janvier 2022 à 18:26:43

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    6 janvier 2022 à 17:41:12

                                    Merci pour votre aide en cette nouvelle année 2022 !  :D

                                    mps a écrit:

                                    Sinon ajoutez (dans le programme de tests qui plante avec sudo et pas lancé normalement):

                                    #!/usr/bin/env python3
                                    import sys
                                    print(sys.path)
                                    try:
                                        import mysql.connector
                                    except Exception as e:
                                        print(e)

                                    pour voir s'il y a des différences côté où Python va chercher les packages.


                                    J'ai appliqué ce que tu proposes mps, et j'ai obtenu la sortie suivante sur ma page :

                                    ['/var/www/html/www.tp_films', '/usr/lib/python38.zip', 
                                    '/usr/lib/python3.8', '/usr/lib/python3.8/lib-dynload', 
                                    '/usr/local/lib/python3.8/dist-packages', 
                                    '/usr/lib/python3/dist-packages']
                                    No module named 'mysql'

                                    ( /var/www/html/www.tp_films ... C'est donc mon serveur ^^  )

                                    Ce que j'en déduis, c'est que les modules ne sont pas accessibles sur le serveur...

                                    • Est-ce que je peux essayer de les installer manuellement directement à la racine de mon serveur ?
                                    • Ce que je ne m'explique pas, c'est qu'avec un autre module (matplotlib par exemple) je n'ai pas d'erreur ... !? o_O
                                    • Par ailleurs, les modules installés avec pip se trouvent dans le fichier caché, dans mon home  .local/lib/python3.8    :  Au vu de la sortie du print(sys.path) ci-dessus, je ne sais pas si c'est normal ?

                                    -
                                    Edité par EricDal Degan 6 janvier 2022 à 17:42:50

                                    • Partager sur Facebook
                                    • Partager sur Twitter

                                    Utilisation de mysql.connector sur un serveur

                                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                    • Editeur
                                    • Markdown