[egenix-mx-base] Module DateTime non trouvé

Résolu

Bonjour,

J'ai un programme qui fait appel à un module que j'ai installé mais malheureusement, il n'est pas accessible (No module named 'DateTime').

Quand j'affiche sys.path, j'ai bien (entre autres) le répertoire où se trouvent mes modules.

d:\....\Python\Lib\site-packages

Fait-il une recherche dans les sous-arborescences de "site-packages" ?

Merci pour vos lumières.

Windows / Firefox 116.0


A+ blux           "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"

13 réponses

  1. Modérateur

    Apparemment oui.

    Je l'ai mis dans la directory où il y a mon programme, ça marche (sauf que j'ai des erreurs de syntaxe dans ce module...).

    Je voudrais déjà régler ce pb de path...


    1. Bonjour,

      "No module named 'DateTime'"

      si c'est le module que tu veux importer, il faut l'écrire comme ceci:

      import datetime

      sans majuscules ...

      1. Modérateur

        Ben non justement, c'est un module spécifique d'un package particulier :-)

        https://www.egenix.com/products/python/mxBase/mxDateTime/

        Il a l'air installé :

        pip install egenix-mx-base
        Requirement already satisfied: egenix-mx-base in d:\....\python\lib\site-packages (3.2.4)

        C'est parce qu'il est appelé dans du code que j'ai récupéré que je dois l'importer.


        1. Salut,

          La dernière version de ce module date de 2015 et Python 2.7

          https://pypi.org/project/egenix-mx-base/

          1. Modérateur

            Oui, j'ai vu que ce n'est pas tout jeune, mais le problème semble venir d'autre part.

        2. Même si c'est un problème de path, il y a trop de différence de syntaxe entre les V2 et V3 pour que tu puisses utiliser ce module sans problème.

          Récupérer dans le module :

          print 'From:', m.getaddr('from')
          raise TypeError, "can't compare the two types"
          1. Modérateur

            Bonjour,

            Autant que possible, tu devrais plutôt utiliser le module standard datetime.

            Si tu es contraint d'utiliser le module dont tu parles :

            • Suis la procédure d'installation indiquée ici.
            • Assure-toi que tu utilises une version de python compatible.
              • Par exemple si c'est un module installé pour python2, aucune chance de l'importer avec python3 (l'interpréteur n'ira pas chercher dans ces dossiers).
              • Idem si le module est installé pour une version spécifique de python (par exemple si tu l'installes dans le dossier de python3.11, alors tu ne pourras pas l'importer avec python3.8).
              • Bref, si tu as plusieurs versions de python installées, sois vigilant !
            • Vérifie dans quel dossier il est installé (donne le chemin complet) et quel interpréteur python tu utilises, car cela impacte la valeur de sys.path.
              • Tu évoques le dossier d:\....\python\lib\site-packages\. Est ce que ce dossier est bien dans ton sys.path ?
                import sys
                print(sys.path)
              • Le nom du module à faire figurer derrière "import" est le nom du dossier dans lequel le module est installé dans d:\....\python\lib\site-packages\. De ce que je vois ici ce serait plutôt :
                from mx.DateTime import DateTime

                (qui correspond à d:\....\python\lib\site-packages\mx\DateTime\DateTime.py)

            Bonne chance

            1. Modérateur

              Salut,

              donc oui, c'est un module spécifique et je ne sais pas ce qui est fait quand on appelle ses fonctions.

              Pour Python, je n'ai que la version 3.

              Sinon, oui sys.path me donne bien le rép.

              Et j'ai bien ça :

              try:
                  import DateTime
              except ImportError:
                  from mx import DateTime

              Qui est bien une anomalie...

              Quand je suffixe avec .DateTime, mon module est appelé mais il plante :

                  def mktime((year,month,day,hour,minute,second,dow,doy,dst),
                            
              SyntaxError: Function parameters cannot be parenthesized     

              Donc, ça pue, je vais voir si je peux faire autrement... Mais comme je débute en Python, ça va pas être facile...

              1. Modérateur

                Attention, regarde bien l'import (je pense que tu as lu mon message alors que j'étais en train de le corriger) :

                from mx.DateTime import DateTime

                Je veux bien aussi le chemin complet dans lequel est installé ton module et la valeur de sys.path (quitte à anonymiser ton login s'il apparaît dans des chemins si tu ne veux pas le faire apparaître sur le forum).

                Bonne chance

            2. Modérateur

              Attention, regarde bien l'import (je pense que tu as lu mon message alors que j'étais en train de le corriger) :

              C'est pour ça que j'ai dit ensuite que c'était bien une anomalie :-))))

              Mon sys.path :

              D:\Applis-W10\Python\python311.zip
              D:\Applis-W10\Python\DLLs
              D:\Applis-W10\Python\Lib
              D:\Applis-W10\Python
              D:\Applis-W10\Python\Lib\site-packages

              Et il semble installé :

              pip install egenix-mx-base
              Requirement already satisfied: egenix-mx-base in d:\applis-w10\python\lib\site-packages (3.2.4)

              1. Modérateur

                Donc, laisse tomber, comme j'avais mis DateTime.py au même niveau que mon pgm, il le trouve tout le temps.

                Si je le renomme, que je mette :

                from mx import DateTime

                ou

                from mx.DateTime import DateTime

                Ca plante :

                ModuleNotFoundError: No module named 'DateTime'


                1. Modérateur

                  Bonjour

                  Par rapport au message #13. Il faut en effet ne pas avoir de dossier/fichier ou DateTime (ou mx) au niveau du fichier où tu fais ton import, sinon il n'ira pas chercher le paquet installé dans D:\Applis-W10\Python\Lib\site-packages (en admettant que ce soit là que ton module est installé).

                  Ensuite concernant ton message d'erreur, assure toi que :\Applis-W10\Python\Lib\site-packages\mx\DateTime\DateTime.py existe, sans quoi l'import ne peut pas marcher. S'il existe, assure-toi que tu as les droits en lecture sur ce fichier.

                  Bonne chance

                  1. Modérateur

                    Le fichier DateTime.py existe bien là où il doit être et j'ai à peu près tous les droits dessus (admin de mon poste).

                    Je ne vois pas ce qui coince...


                    1. Modérateur

                      Le fichier DateTime.py existe bien là où il doit être et j'ai à peu près tous les droits dessus (admin de mon poste).

                      • Faut-il comprendre que son chemin est D:\Applis-W10\Python\Lib\site-packages\mx\DateTime\DateTime.py et que D:\Applis-W10\Python\Lib\site-packages\ est listé dans sys.path ?
                      • Est-ce que mx soit installé dans plusieurs dossiers listés dans sys.path ?

                      Au pire tu peux procéder par essai erreur pour essayer de comprendre. Admettons que DateTime.py soit bien dans D:\Applis-W10\Python\Lib\site-packages\mx\DateTime\.

                      • Si tu crées un fichier D:\Applis-W10\Python\Lib\site-packages\toto.py et que tu lances un interpréteur python, parviens-tu à faire "import toto" ?
                      • Si tu crées un fichier D:\Applis-W10\Python\Lib\site-packages\mx\toto.py parviens-tu à faire "import mx.toto" ?
                      • etc.

                      Bonne chance

                    2. Modérateur
                      @mamiemando

                      Merci mais j'abandonne, car comme je l'ai dit en plus, même si j'arrive à charger le module, j'ai des erreurs quand j'en appelle une fonction.

                    3. Modérateur
                      @blux

                      Ok, comme tu veux, dommage qu'on ait pas trouvé :s Bonne continuation