IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Interfaçage autre langage Python Discussion :

erreur lors interfaçage Python / SWI Prolog [Python 2.X]


Sujet :

Interfaçage autre langage Python

  1. #1
    Membre actif
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Octobre 2008
    Messages
    330
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 330
    Points : 207
    Points
    207
    Par défaut erreur lors interfaçage Python / SWI Prolog
    Bonjour à tous,

    Mon environnement : Windows 8.1, Python 2.7.8, SWI-PROLOG 64 bits version 6.6.6, module pyswip version 0.2.3, PySide version 1.2.2, sqlalchemy version 0.6.1

    Je suis en train de réaliser un petite application de planification en Python qui utilise une routine en Prolog.
    J'ai opté pour pyswip qui m'a l'air bien adapté. J'ai, par contre, un comportement bizarre lors du retour depuis Prolog.
    Dans l'application Python, j'ai plusieurs traitements possibles dont celui qui utilise Prolog. Quand je lance la routine Python/Prolog directement depuis l'ouverture de l'application :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
            ...
            self.mainW.statusBar().showMessage(u"Préparation traitement - Séquences")
            itmm = self.session.query(Item)
            dictR = {}
            lS0 = list(iterateur3())
            lD = 'datL(' + str(lD0) + ').\n'
            lS = 'seqL(' + str(lS0) + ').\n'
            lM = 'maxL(' + str(int(self.dureeMax.value())) + ').\n'
            self.mainW.statusBar().showMessage(u"Préparation PROLOG")
            prolog = Prolog()
            sourceProlog = 'ecn6.pl'
            temp = 'temp.pl'
            fileR = open(sourceProlog, "r")
            text = fileR.read()
            fileR.close()
            new_prolog_code = open(temp,'w')
            new_prolog_code.write(text)
            # Envoi des paramètres vers Prolog
            new_prolog_code.write(lM)
            new_prolog_code.write(lD)
            new_prolog_code.write(lS)
            new_prolog_code.close()
            prolog.consult(temp)
            # Exécution de la requête dans Prolog
            print "Debut PROLOG"
            self.mainW.statusBar().showMessage(u"Début PROLOG")
            prolog.query("schedule").next()
            # Récupération des résultats depuis Prolog
            self.mainW.statusBar().showMessage(u"Retour PROLOG")
            for result in prolog.query("sol(LSS)"):
                LSS = result['LSS']
            prolog = None
            print "Retour PROLOG"
            ...
    au retour sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            for result in prolog.query("sol(LSS)"):
    j'ai une exception qui est levée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
      File "C:\Users\Frederic\workspace\ECN\planning.py", line 327, in onMAJ
        for result in prolog.query("sol(LSS)"):
      File "C:\Python27\lib\site-packages\pyswip-0.2.3-py2.7-win-amd64.egg\pyswip\prolog.py", line 108, in __call__
        t = getTerm(swipl_list)
      File "C:\Python27\lib\site-packages\pyswip-0.2.3-py2.7-win-amd64.egg\pyswip\easy.py", line 326, in getTerm
        res = getList(t)
      File "C:\Python27\lib\site-packages\pyswip-0.2.3-py2.7-win-amd64.egg\pyswip\easy.py", line 339, in getList
        result.append(getTerm(head))
      File "C:\Python27\lib\site-packages\pyswip-0.2.3-py2.7-win-amd64.egg\pyswip\easy.py", line 328, in getTerm
        res = getFunctor(t)
      File "C:\Python27\lib\site-packages\pyswip-0.2.3-py2.7-win-amd64.egg\pyswip\easy.py", line 346, in getFunctor
        return Functor.fromTerm(t)
      File "C:\Python27\lib\site-packages\pyswip-0.2.3-py2.7-win-amd64.egg\pyswip\easy.py", line 194, in fromTerm
        args.append(getTerm(a0 + i))
      File "C:\Python27\lib\site-packages\pyswip-0.2.3-py2.7-win-amd64.egg\pyswip\easy.py", line 326, in getTerm
        res = getList(t)
      File "C:\Python27\lib\site-packages\pyswip-0.2.3-py2.7-win-amd64.egg\pyswip\easy.py", line 339, in getList
        result.append(getTerm(head))
      File "C:\Python27\lib\site-packages\pyswip-0.2.3-py2.7-win-amd64.egg\pyswip\easy.py", line 326, in getTerm
        res = getList(t)
      File "C:\Python27\lib\site-packages\pyswip-0.2.3-py2.7-win-amd64.egg\pyswip\easy.py", line 339, in getList
        result.append(getTerm(head))
      File "C:\Python27\lib\site-packages\pyswip-0.2.3-py2.7-win-amd64.egg\pyswip\easy.py", line 324, in getTerm
        res = _getterm_router[p](t)
      File "C:\Python27\lib\site-packages\pyswip-0.2.3-py2.7-win-amd64.egg\pyswip\easy.py", line 289, in getLong
        if PL_get_long(t, addressof(i)):
    WindowsError: exception: access violation writing 0x00007FF9049B5E10
    Ce qui est surprenant, c'est que lorsque je lance une autre procédure avant je n'ai pas d'erreur et la procédure se déroule normalement ?!
    Les recherches que j'ai fait sur le Net ne m'ont pas permis de bien comprendre ce phénomène et donc de le traiter.
    Merci pour vos pistes et votre aide.
    @+

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 276
    Points : 36 761
    Points
    36 761
    Par défaut
    Salut,

    Vu que le FAQ de pyswip dit:
    3. Q: I can't even run the sample programs, since PySWIP segfaults!

    A: PySWIP still has some problems with 64 bit systems. Please open an issue and post an example code that we'll try to look at that!
    Probable que ce soit un bug côté support 64 bits: essayez de le refaire avec la mouture 32 bits - sans oublier d'installer Python 32 bits, etc.).
    Vous pouvez aussi fabriquer un reproducteur qui intéressera les développeurs (ou les contacter directement).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre actif
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Octobre 2008
    Messages
    330
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 330
    Points : 207
    Points
    207
    Par défaut
    Bonjour Wiztricks,

    Merci pour ta piste, elle me parait pertinente. Par contre, cela m'inquiète un peu de réinstaller TOUT python et TOUS les modules déjà installés en 64 bits. Il n'y a pas de risque que cela mette le bazar ?
    Merci de tes conseils
    @+

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 276
    Points : 36 761
    Points
    36 761
    Par défaut
    Citation Envoyé par Triton972 Voir le message
    Merci pour ta piste, elle me parait pertinente. Par contre, cela m'inquiète un peu de réinstaller TOUT python et TOUS les modules déjà installés en 64 bits. Il n'y a pas de risque que cela mette le bazar ?
    Côté librairies Python, elles iront se poser dans le sous-répertoire "Lib/site-packages" du répertoire spécifique à votre version de Python.
    note: une librairie Python est installée par l'interpréteur Python, si c'est celui de la version 32 bits çà ira dans le répertoire 32 bits, si c'est celui de la version 64 bits... La où çà se corse c'est pour les binaires (i.e. les kits .msi ou .exe installables par Windows). Dans ce cas, le programme d'installation doit trouver le bon répertoire Python... Et certains kits se fient à des informations dans la registry, d'autres vous proposent de choisir le répertoire.
    L'autre source de problème pourra être d'avoir des bibliothèques externes 32 bits ou 64 bits. Côté windows, ils iront dans des répertoires différents mais côté bibliothèque Python qui devra s'appuyer dessus, je ne suis pas sûr que la méthode soit "standard".

    Si vous ne voulez pas prendre de risques, le plus simple sera d'installer Virtualbox.
    Vous créez une machine virtuelle et vous installez vos packages 32 bits dedans.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre actif
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Octobre 2008
    Messages
    330
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 330
    Points : 207
    Points
    207
    Par défaut
    Bien ...
    Je pourrais désinstaller le python 64 bits et tous les modules identifiés en 64 bits et repartir avec un python 32 bits propre puis réinstaller les modules désinstallés avec pip ou easy_install.
    C'est bon comme méthode ?

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 276
    Points : 36 761
    Points
    36 761
    Par défaut
    Citation Envoyé par Triton972 Voir le message
    Je pourrais désinstaller le python 64 bits et tous les modules identifiés en 64 bits et repartir avec un python 32 bits propre puis réinstaller les modules désinstallés avec pip ou easy_install.
    C'est bon comme méthode ?
    Le souci est qu'avec Windows (et des packages open sources parfois buggés), il n'est jamais évident que désinstaller fasse place nette.
    Sur le papier, çà fonctionne mais les risques ne sont jamais nul.
    C'est l'avantage de la machine virtuelle: on sait d'où on part sans avoir à faire de "backup"/"restore".

    A vous de voir.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Membre actif
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Octobre 2008
    Messages
    330
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 330
    Points : 207
    Points
    207
    Par défaut
    J'ai tout basculé en 32 bits.
    Tout est désormais en place sans erreur.
    Merci Wiztricks pour ton aide.
    A la prochaine.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Python 2.X] Problème avec interfaçage DJANGO et SWI-PROLOG
    Par Triton972 dans le forum Django
    Réponses: 10
    Dernier message: 23/01/2015, 10h11
  2. Erreur run_test() swi-prolog (Mac OS X)
    Par mandok dans le forum Prolog
    Réponses: 2
    Dernier message: 03/04/2013, 10h52
  3. [SWI-Prolog] Interfaçage avec XPCE
    Par baouk2000 dans le forum Prolog
    Réponses: 11
    Dernier message: 29/01/2009, 23h43
  4. Erreur lors de modification d'une table
    Par seb.49 dans le forum SQL
    Réponses: 11
    Dernier message: 13/01/2003, 17h16
  5. [VB6] Erreur lors de l'ouverture d'un document Word
    Par Marco le Pouillot dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 03/01/2003, 09h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo