Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 11 sur 11
  1. #1
    Invité de passage
    Inscrit en
    janvier 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : janvier 2009
    Messages : 3
    Points : 0
    Points
    0

    Par défaut Karrigell et les import

    bonjour,j'ai installé le framework Karrigell, cité dans le tutorial Apprendre a programmer en Python,
    mais les codes que je peux les executer en ligne de commande,m'affiche des erreurs

    voila ce code:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    import mapnik
     
    m = mapnik.Map(600,300,"+proj=latlong +datum=WGS84")
    m.background = mapnik.Color('steelblue')
    s = mapnik.Style()
    r=mapnik.Rule()
    r.symbols.append(mapnik.PolygonSymbolizer(mapnik.Color('#f2eff9')))
    r.symbols.append(mapnik.LineSymbolizer(mapnik.Color('rgb(50%,50%,50%)'),0.1))
    s.rules.append(r)
    m.append_style('My Style',s)
    lyr = mapnik.Layer('world',"+proj=latlong +datum=WGS84")
    lyr.datasource = mapnik.Shapefile(file='C:\TM_WORLD_BORDERS-0.2\TM_WORLD_BORDERS-0.2.shp')
    lyr.styles.append('My Style')
    m.layers.append(lyr)
    m.zoom_to_box(lyr.envelope())
    mapnik.render_to_file(m,'world.png', 'png')
    print "done..."
    il m'affiche cette erreur:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Error in /py/1.py
    Line 2    
    import mapnik
    ImportError: No module named mapnik
     
    Traceback (most recent call last):
      File "C:\Program Files\Karrigell-3.0.2\karrigell\core\HTTP.py", line 335, in process_request
      File "C:\Program Files\Karrigell-3.0.2\karrigell\core\k_target.py", line 387, in run
      File "", line 2, in 
    ImportError: No module named mapnik
    merci d'avance

  2. #2
    Membre Expert
    Avatar de fred1599
    Homme Profil pro Fred
    Enseignant
    Inscrit en
    juillet 2006
    Messages
    1 805
    Détails du profil
    Informations personnelles :
    Nom : Homme Fred
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : juillet 2006
    Messages : 1 805
    Points : 2 447
    Points
    2 447

    Par défaut

    Si on considère que tu as bien mapnik , je supposerais un probleme de path.

    As-tu suivi l'installation de mapnik correctement? Des messages d'erreur sont expliqués, à voir.

    Si tu es sous windows va voir ici, il t'explique les messages d'erreur possibles dont la tienne.

    Bon courage!
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  3. #3
    Candidat au titre de Membre du Club
    Profil pro Pierre Quentel
    Inscrit en
    novembre 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Nom : Pierre Quentel

    Informations forums :
    Inscription : novembre 2009
    Messages : 10
    Points : 13
    Points
    13

    Par défaut Imports dans Karrigell

    Bonjour,

    Les imports posent toujours des problèmes dans des environnements partagés comme les serveurs web, chaque utilisateur pouvant modifier sys.path

    Depuis la version 3.0, Karrigell résoud ce problème en distinguant deux cas :

    - les modules de la distribution standard, ou ceux qui sont dans le répertoire karrigell/package : on peut les importer par le classique "import foo"

    - les modules définis par l'utilisateur : il faut utiliser la fonction Import en passant en argument l'url du module :

    foo = Import('chemin/du/module/foo.py')

    C'est expliqué en détail dans la doc

    Pierre

  4. #4
    Candidat au titre de Membre du Club
    Profil pro Pierre Alaime
    Inscrit en
    janvier 2011
    Messages
    23
    Détails du profil
    Informations personnelles :
    Nom : Pierre Alaime

    Informations forums :
    Inscription : janvier 2011
    Messages : 23
    Points : 11
    Points
    11

    Par défaut

    Bonjour,

    Je n'ai pas de problème pour importer un module de la distribution standard ("random" s'importe par exemple très bien) sauf concernant Tkinter... Une partie du message d'erreur est la suivante:

    Code :
    ImportError: No module named Tkinter
    Quelqu'un aurait-il la solution?

    Merci d'avance.

  5. #5
    Candidat au titre de Membre du Club
    Profil pro Pierre Quentel
    Inscrit en
    novembre 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Nom : Pierre Quentel

    Informations forums :
    Inscription : novembre 2009
    Messages : 10
    Points : 13
    Points
    13

    Par défaut

    Cf la discussion dans le forum Tkinter : le problème vient du fait que tu utilises l'application Karrigell.exe, créée avec py2exe. Dans cette application les scripts sont exécutés par un interpréteur qui n'intègre que les modules utilisés dans le package Karrigell, ce qui inclut random mais pas Tkinter

    Pour pouvoir utiliser tous les modules de la distribution standard il faut installer Karrigell à partir de l'archive tar.gz

    - Pierre

  6. #6
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    5 377
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 5 377
    Points : 7 530
    Points
    7 530

    Par défaut

    Citation Envoyé par kervarker Voir le message
    Pour pouvoir utiliser tous les modules de la distribution standard il faut installer Karrigell à partir de l'archive tar.gz
    Croyez vous que cela rendra tkinter utilisable si lancé depuis un script CGI géré par Karrigell? Ou est ce qu'on aura une erreur juste plus difficile à interpréter?
    - W
    Architectures Post-Modernes

  7. #7
    Candidat au titre de Membre du Club
    Profil pro Pierre Quentel
    Inscrit en
    novembre 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Nom : Pierre Quentel

    Informations forums :
    Inscription : novembre 2009
    Messages : 10
    Points : 13
    Points
    13

    Par défaut

    Oui, ça marche : mettez ceci dans test_tk.py dans le répertoire www de Karrigell :
    Code :
    1
    2
    3
    4
    5
     
    from Tkinter import *
    root = Tk()
    Label(root,text="essai").pack()
    root.mainloop()
    et appelez localhost/test_tk.py : ça ouvre bien la fenêtre Tkinter

    - Pierre

  8. #8
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    5 377
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 5 377
    Points : 7 530
    Points
    7 530

    Par défaut

    Citation Envoyé par kervarker Voir le message
    et appelez localhost/test_tk.py : ça ouvre bien la fenêtre Tkinter
    Dans le navigateur?
    - W
    Architectures Post-Modernes

  9. #9
    Candidat au titre de Membre du Club
    Profil pro Pierre Quentel
    Inscrit en
    novembre 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Nom : Pierre Quentel

    Informations forums :
    Inscription : novembre 2009
    Messages : 10
    Points : 13
    Points
    13

    Par défaut

    @wiztricks

    Drôle de question ! Je détaille :
    - on est naturellement en local (navigateur et serveur sur la même machine)
    - Karrigell est lancé en ligne de commande : - quand le navigateur appelle la page http://localhost/test_tk.py cela déclenche l'exécution du script par l'interpréteur Python, qui ouvre une fenêtre Tkinter comme il le ferait en exécutant directement ce script par donc évidemment sans aucun lien avec le navigateur

    Sur le fond j'ai demandé à pieral85 pourquoi il avait besoin d'ouvrir un GUI depuis un script serveur - ça me semble bizarre comme cas d'usage. Si le serveur est distant cela n'aurait aucun intérêt puisque la fenêtre s'ouvrirait sur la machine distante ; il est d'ailleurs probable que les modules Tkinter sont enlevés des distributions Python sur serveur, ce qui déclencherait (heureusement pour le coup) un ImportError

  10. #10
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    5 377
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 5 377
    Points : 7 530
    Points
    7 530

    Par défaut

    Le CGI lancé via le HTTP get induit par http://localhost/test_tk.py s'attend à récupérer du HTML dans un délai raisonnable.

    Je ne vois pas comment cela (délai raisonnable) est applicable au lancement d'une application Tk.
    Admettons qu'on ait besoin de passer par là pour générer une image "assez vite", pourquoi ne pas passer par un subprocess.call (qui récupère le Python installé côté systeme) plutôt que d'essayer de le faire dans le contexte de la requête HTTP?

    - W
    PS: en plus c'est un truc ou il va falloir que Tk travaille head less.
    Architectures Post-Modernes

  11. #11
    Candidat au titre de Membre du Club
    Profil pro Pierre Quentel
    Inscrit en
    novembre 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Nom : Pierre Quentel

    Informations forums :
    Inscription : novembre 2009
    Messages : 10
    Points : 13
    Points
    13

    Par défaut

    Pendant que la boucle de Tkinter tourne le script Karrigell est suspendu, mais si on fait un "print" puis qu'on détruit la fenêtre, on sort de cette boucle et le résultat apparait bien dans le navigateur (ce qui fait que j'avais d'ailleurs tort de dire qu'il n'y avait aucun lien)

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    from Tkinter import *
     
    def test():
        print "<b>impression</b> dans le navigateur"
        root.destroy()
     
    root = Tk()
    Button(root,text="essai",command=test).pack()
    root.mainloop()
    Encore une fois je suis d'accord que c'est un cas d'usage assez bizarre, mais ça fonctionne

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •