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 :

debutant (problème creation de module)


Sujet :

Python

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 3
    Par défaut debutant (problème creation de module)
    Bonjour à tous,

    débutant en prog je fais mes premier pas avec python.

    est-ce que quelqu'un peut m'expliquer pourquoi ces codes ne fonctionnent pas?

    je souhaite écrire des fonctions dans un module que j'appelle Mon_mod.py, j'enregistre ce fichier dans le répertoire suivant :
    C:\Documents and Settings\ROUILLE\Mes documents\Test_py

    sous l'editeur python shell je tape les ligne suivante ( je vous fais un copier /coller vous verrez alors l'erreur qui m'est retournée ! pourquoi je comprends pas? Merci d'avance de votre aide
    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
    Python 2.6.4 (r264:75708, Oct 26 2009, 08:23:19) [MSC v.1500 32 bit (Intel)] on win32
    Type "copyright", "credits" or "license()" for more information.
     
        ****************************************************************
        Personal firewall software may warn about the connection IDLE
        makes to its subprocess using this computer's internal loopback
        interface.  This connection is not visible on any external
        interface and no data is sent to or received from the Internet.
        ****************************************************************
     
    IDLE 2.6.4      
    >>> from os import chdir
    >>> chdir("C:/Documents and Settings/ROUILLE/Mes documents/Test_py")
    >>> from Mon_mod import*
     
    Traceback (most recent call last):
      File "<pyshell#2>", line 1, in <module>
        from Mon_mod import*
    ImportError: No module named Mon_mod
    >>>

  2. #2
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonjour,

    Sur de toi ? Teste cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    patrice@Zeus:~$ python
    Python 2.6.2 (release26-maint, Apr 19 2009, 01:56:41) 
    [GCC 4.3.3] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import Mon_mod
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ImportError: No module named Mon_mod
    >>> import os.path
    >>> if os.path.isfile(os.path.join(os.getcwd(), 'Mon_mod.py')): import Mon_mod
    ... else: print 'pas dans ', os.getcwd()
    ... 
    pas dans  /home/patrice
    >>>
    @+

  3. #3
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 047
    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 : 4 047
    Par défaut
    Il faut un espace entre le "t" de import et le "*".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    >>> chdir("C:/Documents and Settings/ROUILLE/Mes documents/Test_py")
    Mon_mod
    Es-tu sûr qu'il s'écrit bien de cette façon. Attention Python respecte la casse, il différencie les minuscules des majuscules.

  4. #4
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Citation Envoyé par krikridamour Voir le message
    Mon_mod.py
    Citation Envoyé par fred1599 Voir le message
    Es-tu sûr qu'il s'écrit bien de cette façon. Attention Python respecte la casse, il différencie les minuscules des majuscules.
    Regarde surtout ici (pour chdir tu aurais un OSError)

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 3
    Par défaut Tjs pas compris
    merci pour vos reponses,

    mais rien y fait, je suis obligé de créer le module en question dans le rep courant de python sinon cela ne fonctionne pas ?

    Si quelqu'un a un exemple, pour utiliser un module qui serait placé dans un repertoire genre :

    C:\mon_rep

    je suis preneur

    a bientôt

  6. #6
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Par défaut
    bonjour,

    bienvenue dans le monde de python

    pour répondre à ta question, je dirais qu'il faut modifier le sys.path:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    import os, sys
    sys.path.append(os.path.join("C:","mon_rep"))
    mais mon point de vue est que si tu débutes en python, et qui plus est en programmation en général ne te mets pas des bâtons dans les roues tout seul

    si tu prends la mauvaise habitude d'utiliser cette technique à tout va, tu risques de passer à côté d'autres mécanismes beaucoup mieux ficelés.

    la technique que je donne est "propre" mais doit être réservée à des cas exceptionnels et donc, je ne te conseille pas de l'utiliser. le fait de faire un os.chdir avant de faire un import, j'ai testé, ça fonctionne, mais c'est franchement moche :p

    personnellement, je te conseille de commencer avec des choses plus académiques, tu découvriras bien assez tôt les mécanismes pour ranger les fichiers où tu veux.

    le problème que tu rencontres là est directement lié au mécanisme des "import" en python, il y a vraiment des chapitres plus intéressants pour débuter en python

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2008
    Messages : 141
    Par défaut
    Salut !

    Effectivement, tu dois modifier le sys.path pour prendre en compte ton module.

    Toutefois, il y a des méthodes + abordables que de le modifier directement par du code python.

    Lorsque tu importes un module, Python va le chercher dans les répertoires suivants, dans l'ordre:
    1. le répertoire courant, à savoir celui de la session interactive ou celui du script qui est lancé par la commande python mon_script.py ;
    2. les répertoires référencés dans la variable d'environnement PYTHONPATH ;
    3. le répertoire Lib de python (e.g. C:\Python26\Lib avec Python26 sous Windows) ;
    4. les répertoires référencés par des fichiers .pth situés dans les répertoires ci-dessus.

    EDIT : sur ces 4 étapes, on peut influencer les étapes 2 & 4 uniquement (et la 1 dans une moindre mesure).

    Le plus simple est de positionner la variable d'environnement PYTHONPATH à un répertoire à toi dans lequel tu placeras l'ensemble de tes modules.

    Sache toutefois qu'il faudra faire attention aux noms de tes modules.
    Dès que python trouve un module dont le nom correspond à celui que tu veux importer, il arrête sa recherche.
    Si tu définis PYTHONPATH et que tu places dans ton répertoire un module string.py, tu ne pourras plus importer le module string de la librairie standard, car celle-ci est parcourue lors de l'étape 3, alors que ton module est trouvé lors de l'étape 2.

    Note : Python, depuis la version 3, ne recherche plus les modules dans le répertoire local pour les scripts lancés depuis une commande python mon_script.py. Il faut utiliser les imports relatifs, je vous laisse fouiller dans la doc si vous êtes intéressés, c'est peut-être (sûrement) + complexe que ce que j'ai écrit.

  8. #8
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonsoir,

    Désolé si j'insiste mais que te donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    import os.path
    os.chdir("C:/Documents and Settings/ROUILLE/Mes documents/Test_py")
    if os.path.isfile(os.path.join(os.getcwd(), 'Mon_mod.py')):
        import Mon_mod
        print 'ok'
    else: print 'pas dans', os.getcwd()
    @+

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 3
    Par défaut
    merci à tous,
    je vais effectivement essayer pour le moment des choses plus simple pour apprendre ce langage.

    Ps pour Pausekawa : j'ai bien compris que ton code retourne "pas dans"+ le rep que j'ai défini, mais je ne cmoprends tous les détails de la ligne :

    if os.path.isfile(os.path.join(os.getcwd(), 'Mon_mod.py')):

    peux-tu m'expliquer?

  10. #10
    Membre émérite
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Par défaut
    Citation Envoyé par PauseKawa Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if os.path.isfile(os.path.join(os.getcwd(), 'Mon_mod.py')):
    Cette ligne peut être simplifiée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if os.path.isfile('Mon_mod.py'):

  11. #11
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Citation Envoyé par krikridamour Voir le message
    Ps pour Pausekawa : j'ai bien compris que ton code retourne "pas dans"+ le rep que j'ai défini, mais je ne cmoprends tous les détails de la ligne :

    if os.path.isfile(os.path.join(os.getcwd(), 'Mon_mod.py')):

    peux-tu m'expliquer?
    L'os.getcwd() retourne le répertoire courant. L'os.path.join retourne donc le chemin complet (répertoire courant + nom du script) au bon format pour le système, soit pour toi et ce après le os.chdir :

    C:\Documents and Settings\ROUILLE\Mes documents\Test_py\Mon_mod.py

    Antoine_935 a raison de dire que puisque nous somme déjà dans
    C:\Documents and Settings\ROUILLE\Mes documents\Test_py\ un if os.path.isfile('Mon_mod.py'): est suffisant. Je souhaitais juste avoir le chemin absolu.

    Par contre tu dit que cela te retourne 'pas dans ...' ?
    Donc Mon_mod.py n'existe pas (attention aux maj/min) dans C:\Documents and Settings\ROUILLE\Mes documents\Test_py\ et c'est pour cela que tu as un problème d'import.

    @+

  12. #12
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonjour,

    Teste cela :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    import os.path
    os.chdir("C:/Documents and Settings/ROUILLE/Mes documents/Test_py")
    if os.path.isfile(os.path.join(os.getcwd(), 'Mon_mod.py')):
        import Mon_mod
        print 'ok'
    else:
        print 'pas dans', os.getcwd()
        for items in (fichier for fichier in os.listdir(os.getcwd()) if fichier[-3:] == '.py'):
            print items
    @+

Discussions similaires

  1. [DX9] [Debutant] Problème de transparence :(
    Par SekYo dans le forum DirectX
    Réponses: 5
    Dernier message: 10/09/2004, 14h19
  2. [Debutant] Problème de sécurité dans un applet
    Par peaceinpal dans le forum Applets
    Réponses: 3
    Dernier message: 09/09/2004, 20h56
  3. [Debutant(e)]creation de JavaBeans
    Par Tanahjampea dans le forum AWT/Swing
    Réponses: 8
    Dernier message: 12/08/2004, 16h44
  4. [debutant]Problèmes
    Par BibiGmi dans le forum OpenGL
    Réponses: 2
    Dernier message: 05/03/2004, 14h00
  5. [Debutant] Problème du linker [Dev-c++4]
    Par Macdir dans le forum Dev-C++
    Réponses: 3
    Dernier message: 30/05/2003, 20h50

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