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

Django Python Discussion :

Problème avec interfaçage DJANGO et SWI-PROLOG


Sujet :

Django 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 Problème avec interfaçage DJANGO et SWI-PROLOG
    Bonjour à tous,
    J'ai développé une petite appli en Python avec une routine en SWI-PROLOG. Elle fonctionne bien après quelques ajustements en particulier, en basculant tout en 32 bits.
    Mon environnement : Windows 8.1, Python 2.7.8 32 bits, SWI-PROLOG version 6.4.0 32 bits, module pyswip version 0.2.3
    Je cherche maintenant à l'adapter dans une version Web avec Django (version 1.7.2) (Je démarre la découverte de Django ...) Je la développe dans un environnement virtuel (Git).
    J'ai installé pyswip (version 0.2.2) avec la commande Par contre, lorsque le lance la console python avec et que je lance la commande je recois le message suivant
    libpl (shared) not found ... SWI-Prolog not installed as a shared library ...
    Comme je n'ai pas ce genre de message avec l'application en Python pur je pense que cela doit venir, peut être, du fait que je travaille dans une environnement virtuel ... Mais, je ne sais pas vraiment comment traiter ce type de problème.
    Merci d'avance pour vos pistes.
    @+

  2. #2
    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 cherché toute la journée pour me rendre compte que le problème était (en partie) résolu dans l'exposé de la question ...
    La version de pyswip installée dans windows (version 0.2.3) est différente de celle installée dans l'environnement virtuel (version 0.2.2). Pourquoi (??) alors qu'elles ont été installées toutes les deux avec pip ...
    Enfin, j'ai donc réglé le problème en recopiant le paquet de pyswip de windows dans de le répertoire de l'environnement virtuel. C'est un pas important.
    J'ai testé l'exemple standard de pyswip https://code.google.com/p/pyswip/ dans Django et cela fonctionne bien.
    Il me reste encore un problème à traiter, je n'arrive pas à lancer la commande
    consult
    . En fait, je ne sais pas trop où mettre le fichier à lire ou comment modifier la commande pour désigner le chemin du fichier à lire.
    Le morceau de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    def index(request):
        prolog = Prolog()
        prolog.consult("temp.pl")
        prolog.query("schedule").next()
        for result in prolog.query("sol(LSS)"):
            LSS = result['LSS']
        prolog = None
        output = str(LSS)
     
        return HttpResponse(output)
    et le message d'erreur :
    PrologError at /planning/

    Caused by: 'consult('temp.pl')'.

    Request Method: GET
    Request URL: http://localhost:8000/planning/
    Django Version: 1.7.2
    Exception Type: PrologError
    Exception Value:

    Caused by: 'consult('temp.pl')'.

    Exception Location: c:\Users\Frederic\ecn_env\lib\site-packages\pyswip\prolog.py in __call__, line 124
    Python Executable: c:\Users\Frederic\ecn_env\Scripts\python.exe
    Python Version: 2.7.8
    Python Path:

    ['d:\\django\\ecn',
    'C:\\Windows\\SYSTEM32\\python27.zip',
    'c:\\Users\\Frederic\\ecn_env\\DLLs',
    'c:\\Users\\Frederic\\ecn_env\\lib',
    'c:\\Users\\Frederic\\ecn_env\\lib\\plat-win',
    'c:\\Users\\Frederic\\ecn_env\\lib\\lib-tk',
    'c:\\Users\\Frederic\\ecn_env\\Scripts',
    'c:\\Python27\\Lib',
    'c:\\Python27\\DLLs',
    'c:\\Python27\\Lib\\lib-tk',
    'c:\\Users\\Frederic\\ecn_env',
    'c:\\Users\\Frederic\\ecn_env\\lib\\site-packages']
    Merci d'avance pour vos idées.
    @+

  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
    La résolution avance ...
    En fait il n'y avait pas grand chose à faire pour que le code fonctionne (presque) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    def planning(request):
        prolog = Prolog()
        prolog.consult("temp.pl")
        list(prolog.query("schedule"))
        LSS = list(prolog.query("sol(LSS)"))[1]['LSS']
        prolog = None
        output = str(LSS)
        return HttpResponse(output)
    Le souci maintenant est que le code ne fonctionne que si je le lance juste après avoir lancé le serveur avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    python manage.py runserver
    Si je relance la page j'obtiens un message d'erreur
    WindowsError at /planning/planning/

    exception: access violation reading 0x00000020

    Request Method: GET
    Request URL: http://localhost:8000/planning/planning/
    Django Version: 1.7.2
    Exception Type: WindowsError
    Exception Value:

    exception: access violation reading 0x00000020

    Exception Location: c:\Users\Frederic\ecn_env\lib\site-packages\pyswip\prolog.py in __call__, line 93
    Python Executable: c:\Users\Frederic\ecn_env\Scripts\python.exe
    Python Version: 2.7.8
    Python Path:

    ['d:\\django\\ecn',
    'C:\\Windows\\SYSTEM32\\python27.zip',
    'c:\\Users\\Frederic\\ecn_env\\DLLs',
    'c:\\Users\\Frederic\\ecn_env\\lib',
    'c:\\Users\\Frederic\\ecn_env\\lib\\plat-win',
    'c:\\Users\\Frederic\\ecn_env\\lib\\lib-tk',
    'c:\\Users\\Frederic\\ecn_env\\Scripts',
    'c:\\Python27\\Lib',
    'c:\\Python27\\DLLs',
    'c:\\Python27\\Lib\\lib-tk',
    'c:\\Users\\Frederic\\ecn_env',
    'c:\\Users\\Frederic\\ecn_env\\lib\\site-packages']

    Server time: sam, 17 Jan 2015 22:30:48 -0400
    sur le terminal j'ai le message suivant :
    Exception AttributeError : 'swipl_qid in <bound method _QueryWrapper.__del__ of <pyswip.prolog._QueryWrapper object at 0x326DAA8> ignored
    xxxxx "GET /planning/planning/ HTTP/1.1" 500 75159
    Je poursuis mes recherches (les 1° m'orientent vers le module - ctypes - https://docs.python.org/2.7/library/ctypes.htmlhttp://) mais si quelqu'un a une piste ...
    Merci @+

  4. #4
    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
    Bon, les progrès sont minces ...
    J'ai installé la dernière version de SWI-Prolog en 32 bits (version 6.6.6), j'ai redéployé l'application sous Eclipse afin de ne plus travailler dans un environnement virtuel et de pouvoir utiliser le mode Debug et j'ai toujours le même comportement. La page se charge bien quand je réinitialise le serveur juste avant. J'ai 2 pistes :

    • Trouver la faille en mode debug mais je dois avouer que c'est un peu costaud, il me manque un peu de technique ...
    • Trouver un moyen de relancer (voir de "nettoyer") le serveur directement dans le code avant le chargement de la page afin d'essayer de comprendre le phénomène.


    Si quelqu'un a des pistes pour l'une ou l'autre des pistes, je suis preneur.
    Merci d'avance
    @+

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par Triton972 Voir le message
    Si quelqu'un a des pistes pour l'une ou l'autre des pistes, je suis preneur.
    Merci d'avance
    C'est le genre de truc ou il faut avoir du temps à passer.
    Ca serait mieux de contacter les développeurs via leur groupe de discussion ou un chat s'il existe.
    La vraie question est de savoir quelles sont les précautions à prendre lorsqu'on intègre une application pyswip dans un framework Web tel que Django.
    Lorsque vous écrivez:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    def planning(request):
        prolog = Prolog()
        prolog.consult("temp.pl")
        list(prolog.query("schedule"))
        LSS = list(prolog.query("sol(LSS)"))[1]['LSS']
        prolog = None
        output = str(LSS)
        return HttpResponse(output)
    Vous allez ré-initialiser tout à chaque requête. Pas sûr que çà soit "supporté" (voire intelligent).
    Essayez de faire un script qui fasse la même chose en mode console (pas la peine d'avoir la quincaillerie Django pour appeler n-fois la même fonction).

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

  6. #6
    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
    Merci wiztricks pour tes conseils.

    J'ai cherché sur le Net et je suis tombé sur : https://github.com/dabapps/django-pr...pe/apps/sudoku qui me semble fort intéressant ...

    Malheureusement je n'arrive, pour l'instant, ni à la faire fonctionner (problème avec 'crispy_forms' ...) ni à l'adapter à mon cas de figure. Je débute sur Django et cela dépasse mes maigres connaissances. Je ne comprends pas bien l'enchainement des différentes procédures.

    Question : Est-ce que le principe de cette application vous parait adaptée à mon problème (Utilisation de FormView, de forms.Form et d'un objet spécifique pour l'accès à Prolog) ?
    Merci pour vos avis.
    @+

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par Triton972 Voir le message
    Question : Est-ce que le principe de cette application vous parait adaptée à mon problème (Utilisation de FormView, de forms.Form et d'un objet spécifique pour l'accès à Prolog) ?
    Django étant un framework, toutes les (petites) applications ont une structure similaire.

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

  8. #8
    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
    D'accord, mais je ne comprends toujours pas pourquoi le code avec une fonction :
    def planning(request):
    prolog = Prolog()
    prolog.consult("temp.pl")
    list(prolog.query("schedule"))
    LSS = list(prolog.query("sol(LSS)"))[1]['LSS']
    prolog = None
    output = str(LSS)
    return HttpResponse(output)
    ne fonctionne pas et pourquoi l'utilisation de FormView pourrait régler le problème ???
    Je te remercie pour tes eclaircissements ...

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par Triton972 Voir le message
    D'accord, mais je ne comprends toujours pas pourquoi le code avec une fonction :

    ne fonctionne pas et pourquoi l'utilisation de FormView pourrait régler le problème ???
    Je te remercie pour tes eclaircissements ...
    Désolé mais je n'ai pas le temps d'installer une configuration similaire pour en faire le debug et la mise au point.

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

  10. #10
    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
    Je n'en demande pas tant ! Mais juste un début d'explication pour m'orienter.
    Merci @+

  11. #11
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par Triton972 Voir le message
    Je n'en demande pas tant ! Mais juste un début d'explication pour m'orienter.
    Pour essayer d'expliquer, il faut un peu comprendre et difficile d'y arriver sans commencer par essayer de reproduire.

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

Discussions similaires

  1. [SWI-Prolog] Interfaçage avec XPCE
    Par baouk2000 dans le forum Prolog
    Réponses: 11
    Dernier message: 29/01/2009, 23h43
  2. Réponses: 5
    Dernier message: 14/05/2008, 18h14
  3. Réponses: 2
    Dernier message: 23/03/2008, 09h46
  4. Réponses: 1
    Dernier message: 12/02/2008, 09h10
  5. [Django] Problème avec syncdb
    Par Soran dans le forum Django
    Réponses: 3
    Dernier message: 30/08/2007, 09h33

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