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

Réseau/Web Python Discussion :

Karrigell et les import


Sujet :

Réseau/Web Python

  1. #1
    Candidat au Club
    Inscrit en
    Janvier 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 3
    Points : 3
    Points
    3
    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 : 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
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 811
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 811
    Points : 7 093
    Points
    7 093
    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
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 10
    Points : 14
    Points
    14
    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
    Membre à l'essai
    Profil pro
    Client Solution Developer
    Inscrit en
    Janvier 2011
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Client Solution Developer

    Informations forums :
    Inscription : Janvier 2011
    Messages : 23
    Points : 21
    Points
    21
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    ImportError: No module named Tkinter
    Quelqu'un aurait-il la solution?

    Merci d'avance.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 10
    Points : 14
    Points
    14
    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
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 281
    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 281
    Points : 36 768
    Points
    36 768
    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.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 10
    Points : 14
    Points
    14
    Par défaut
    Oui, ça marche : mettez ceci dans test_tk.py dans le répertoire www de Karrigell :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 281
    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 281
    Points : 36 768
    Points
    36 768
    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.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 10
    Points : 14
    Points
    14
    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
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 281
    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 281
    Points : 36 768
    Points
    36 768
    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.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 10
    Points : 14
    Points
    14
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

Discussions similaires

  1. Question de debutant sur les Imports
    Par gibea00 dans le forum Framework .NET
    Réponses: 1
    Dernier message: 04/12/2006, 15h33
  2. Lister les imports d'un .class
    Par otsgd dans le forum Langage
    Réponses: 3
    Dernier message: 23/10/2006, 16h01
  3. Question sur les import
    Par zoullou dans le forum Langage
    Réponses: 4
    Dernier message: 29/04/2006, 21h37
  4. Prendre que les 5 premiers enregistrements (les + important)
    Par __fabrice dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 02/11/2005, 09h24
  5. [Plugin] Factoriser les import (gestion des import)
    Par Oliveuh dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 08/07/2004, 12h21

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