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

Python Discussion :

import module spyder


Sujet :

Python

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 104
    Points : 23
    Points
    23
    Par défaut import module spyder
    Bonjour,

    C'est bizarre je n'arrive pas à lancer ma routine, le import ne fonctionne pas :



    Dans le cas du init de Datastructure (contenant quadtree.py) j'ai bien (Tous les "init" ont cette structure):
    __all__ = ["quadtree"]

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

    Citation Envoyé par dfshr8 Voir le message
    C'est bizarre je n'arrive pas à lancer ma routine, le import ne fonctionne pas :
    Si "import" ne fonctionnait pas non seulement çà se saurait mais votre code aurait planté bien plus tôt.
    La première chose à vérifier est que la consistance du message d'erreur: s'il ne trouve pas le fichier translations.py dans pyFMM... vérifier s'il y est ou pas ne coûte pas cher mais il n'y a que vous à pouvoir le faire.

    L'étape suivante serait de vérifier que l'import fonctionne depuis la console (i.e. hors IDE, hors application).

    Une cause probable serait que le répertoire pyFMM dans lequel vous avez construit tout ou partie de l'arborescence de votre application soit en conflit avec le "bon" pyFMM.

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

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 104
    Points : 23
    Points
    23
    Par défaut
    Le fichiers translations.py est bien présent comme on peut le voir dans l'impression écran du message d'origine, où dans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    @Ellington:~/Dropbox/Stage/Code_FMM/python_code/pyfmm-read-only$ ls pyFMM/Kernels/
    __init__.py  translations.py
    laurent@Ellington:~/Dropbox/Stage/Code_FMM/python_code/pyfmm-read-only$
    J'ai tenté avec la console sans succés!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    python_code/pyfmm-read-only/pyFMM$ python FastMultipole/fastMultipoleMethod.py 
    Traceback (most recent call last):
      File "FastMultipole/fastMultipoleMethod.py", line 6, in <module>
        from pyFMM.Kernels.translations import *
    ImportError: No module named pyFMM.Kernels.translations
    Si quelqu'un accepte de télécharger le module pour vérifier que ça marche pour lui ce serait super sympas:

    J'ai réalisé:
    svn checkout http://pyfmm.googlecode.com/svn/trunk/ pyfmm-read-only sur http://code.google.com/p/pyfmm/wiki/HowToPyFMM
    ce qui m' a créé un dossier pyfmm-read-only avec tous les fihiers. Puis j'ai ouvert python (avec spyder) et tenté de lancer translatins.py (pas de pbm), quadtree.py (pas de pbm) mais pour mais pour FastMultipoleMethod.py ça nefonctionne pas...

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 104
    Points : 23
    Points
    23
    Par défaut
    Ah je crois que c'est une histoire de variable d'environnement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    After downloading (and extracting) the latest version of the code, you need to add the folder of the package to the PYTHONPATH system variable, e.g.: Let suppose that the final folder is /Users/user/pyFMMv1.X.X
     
    export PYTHONPATH=${PYTHONPATH}:/Users/user/pyFMMv1.X.X
    Si quelqu'un peut m' expliquer.. (je suis débutant en informatique donc avec des mots simples)

  5. #5
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Ça n'a rien de compliqué, ton script ne peut importer que ce qu'il trouve dans le dossier où il se trouve et ses sous-dossiers. Ceux-ci ayant un fichier __init__.py comme ce semble être ton cas.

    Mais en aucun cas Python ne remontera dans l'arborescence des dossiers pour rechercher ce que tu demandes.

    Tu peux donc, à cette fin, ajouter un (des) chemin(s) avec sys.path.append('mon/chemin') mais la meilleure solution sera toujours que le script qui lance l'application soit dans le dossier root de celle-ci.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 104
    Points : 23
    Points
    23
    Par défaut
    Merci j'ai essayé ta secode méthode (ie) de déplacer les dossier Kernels et DataStructure dans le dossier FastMultipole et c'est nickel!


    Je ne comprends pas certaines parties de code, par exemple:
    fac = lambda n: [1, 0] [n > 0] or fac(n - 1) * n

    Qu'est ce que ça fait ? J'ai une fonction 'fa' qui n'est pas définit par la procdure habituelle mais utilise le mot clé lambda. J'imagine que le code signifie
    * le "n:" signifie 'à n j'associe'
    *"[1, 0] [n > 0]" là je ne capte pas (même si je m dute que ca traite les cas 0 et 1)
    * "or fac(n - 1) * n" : definition recursive

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

    Informations forums :
    Inscription : Novembre 2011
    Messages : 104
    Points : 23
    Points
    23
    Par défaut
    Je ne comprends pas non plus:

    1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    def binToStr(n):
        '''convert a binary number to a binary string'''
        bStr = ''
        while n > 0:
            bStr = str(n % 2) + bStr
            n = n >> 1
        return bStr
    Que signifie: n = n >> 1

    2) Je pensais que ce ode me donait la version binaire d'un nombre n \in [0,1] avec une précision :level.Mais c'est faux car pour
    toBinStr(1,2)
    Out[83]: '11'

    0.5 alors

    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
    def toBinStr(n, level):
        ''' Convert a float to a binary string'''
        bStr=''
        if n < 0 or n > 1 : raise ValueError, 'number must be between [0,1]'
        if level < 0: raise ValueError, 'level must be a positive integer'
        levelcount = 0
        boxsize = 1.0         
        while levelcount < level:
            boxsize = boxsize / 2
            if n > boxsize:
                bStr = bStr + '1'
                n = n - boxsize
            else:
                bStr = bStr + '0'
            levelcount = levelcount + 1
        return bStr

  8. #8
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Points : 1 384
    Points
    1 384
    Par défaut
    Citation Envoyé par dfshr8 Voir le message
    Je ne comprends pas certaines parties de code, par exemple:
    fac = lambda n: [1, 0] [n > 0] or fac(n - 1) * n

    Qu'est ce que ça fait ? J'ai une fonction 'fa' qui n'est pas définit par la procdure habituelle mais utilise le mot clé lambda. J'imagine que le code signifie
    * le "n:" signifie 'à n j'associe'
    *"[1, 0] [n > 0]" là je ne capte pas (même si je m dute que ca traite les cas 0 et 1)
    * "or fac(n - 1) * n" : definition recursive
    le mot-clé lambda permet de définir une fonction anonyme, dont le corps est constitué d'une simple expression. C'est équivalent à:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def fac(n):
        return [1, 0] [n > 0] or fac(n - 1) * n
    [1,0][n>0] est une liste indexée par un booléen; True correspond à l'indice 1 et False à l'indice 0. Donc si n > 0 est vrai, le résultat sera 0, sinon il sera 1.

    L'opérateur or renvoie la valeur de son premier argument s'il est évalué à vrai, sinon il évalue et renvoie le second. Ici c'est un peu l'inverse du cas précédent, où on utilisait un booléen dans un contexte où on attendait un entier; ici on utilise un entier (0 ou 1) dans un contexte où en attendrait un booléen. 0 est interprété comme False et toute autre valeur entière comme True.

    Donc si le résultat de l'expression précédente était 1, donc si n <= 0, c'est la valeur 1 qui est retournée. Sinon (n>0), la valeur était 0 et le second argument du or est évalué, c'est à dire fac(n-1) * n.

    Il pourrait sembler qu'on puisse simplifier ça en [1,fac(n-1) * n][n>0] mais cela causerait une boucle infinie d'appels (qui finirait par un "max recursion depth exceeded"), car tout reposait sur le fait que or n'évalue pas le second argument si le premier est vrai.

    C'est une écriture idiomatique un peu archaïque; une écriture plus moderne serait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fac = lambda n: fac(n-1) * n if n > 0 else 1
    ou simplement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def fac(n):
      if n > 0:
        return fac(n-1) * n
      else:
        return 1
    Citation Envoyé par dfshr8 Voir le message
    Que signifie: n = n >> 1
    C'est un déclage vers la droite d'un bit. Cela correspond à une division entière par 2
    https://docs.python.org/2/reference/...ing-operations

    Citation Envoyé par dfshr8 Voir le message
    2) Je pensais que ce ode me donait la version binaire d'un nombre n \in [0,1] avec une précision :level.Mais c'est faux car pour
    toBinStr(1,2)
    Out[83]: '11'

    0.5 alors

    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
    def toBinStr(n, level):
        ''' Convert a float to a binary string'''
        bStr=''
        if n < 0 or n > 1 : raise ValueError, 'number must be between [0,1]'
        if level < 0: raise ValueError, 'level must be a positive integer'
        levelcount = 0
        boxsize = 1.0         
        while levelcount < level:
            boxsize = boxsize / 2
            if n > boxsize:
                bStr = bStr + '1'
                n = n - boxsize
            else:
                bStr = bStr + '0'
            levelcount = levelcount + 1
        return bStr
    Il ne renvoie que la parti fractionnelle
    1 = 0.99999999...
    Ou en binaire: 1 = 0.11111111111...
    Donc c'est normal qu'il renvoie 11 si tu ne demandes que deux chiffres de précision.
    0.5 en binaire donne 0.1 ou 0.0111111.... Ici c'est la seconde représentation à cause du n > boxsize. Si tu veux la première représentation, il faut remplacer > par >=.

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

Discussions similaires

  1. spécifications d'importation modulables
    Par Ne0zenith dans le forum VBA Access
    Réponses: 3
    Dernier message: 04/06/2009, 16h56
  2. [VBA]Import modules de classe dans Access 2003
    Par pht33 dans le forum VBA Access
    Réponses: 1
    Dernier message: 24/04/2007, 15h45
  3. importer module à partir d'une chaîne de caractères
    Par j_p_g dans le forum Général Python
    Réponses: 2
    Dernier message: 23/04/2007, 15h15
  4. [wsad/erreur import war]Error importing module file
    Par valal dans le forum Websphere
    Réponses: 1
    Dernier message: 05/09/2006, 15h01

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