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 :

Où placer la liste des imports ?


Sujet :

Python

  1. #1
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 64
    Par défaut Où placer la liste des imports ?
    Bonjour…
    Toujours une question de débutant.
    Je suis en train de faire le ménage dans mes scripts et mes modules. Et, juste pour le principe, je désire optimiser l’ écriture des importations.
    J’ai donc un script principal («*analyse.py*» qui contient le mainloop() ) et différents modules.
    Voici l’état des lieux
    J’ai 2 fenêtres avec chacune des canvas, des labels et des boutons qui sont créés dans deux modules nommés GUI.py et GUI_stat.py
    Il y a également un module «*fonctions.py*», un module «*fichiers.py*» un module «*statistiques.py*» et un module «*debogage.py*»
    Je fais différentes importations telles tkinter, os.path, pickle, random, time et d'autres… certains modules pouvant utiliser tout ou partie de ces importations.
    La question est simple*: Puis_je ne déclarer ces importations que dans un seul script, et dans lequel*? de façon à ce que tout ce beau monde puisse en profiter selon ses besoins. Ou à contrario, importer tout dans chacun des modules*?
    Je pose cette question parce que, utilisant PyCharm comme IDE, j’avais des problèmes d’import car j’avais laissé l’option «*optimize import*» cochée dans les préférences de l’application et PyCharm en quittant effaçait les imports qu'il jugeait inutilisés dans les modules.
    Merci d’avance

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 603
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 603
    Par défaut
    Ca m'arrive de glisser mes imports dans le __init__.py à côté de mes classes.

  3. #3
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 726
    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 726
    Par défaut
    Salut,

    Citation Envoyé par azad2b Voir le message
    Puis_je ne déclarer ces importations que dans un seul script, et dans lequel*?
    Techniquement, s'il y a:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    import tkinter
    import os
    dans différents modules, on peut les pousser dans tutu.py et remplacer ces lignes par:
    Ceci dit j'évite de faire ce genre de chose et si je constate:
    Citation Envoyé par azad2b Voir le message
    Je fais différentes importations telles tkinter, os.path, pickle, random, time et d'autres… certains modules pouvant utiliser tout ou partie de ces importations.
    c'est que mon module est un vrai foutoir dans lequel il y a un peu de rangement à faire (pousser des trucs dans d'autres modules).

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

  4. #4
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 64
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,





    c'est que mon module est un vrai foutoir dans lequel il y a un peu de rangement à faire (pousser des trucs dans d'autres modules).

    - W
    OK,c'est tellement le foutoir, que même moi qui n'ai pas l'âme ménagère, j'ai entrepris d'y mettre de l'ordre. Seulement, j'ai des choses dans par exemple 'fonctions' qui accèdent à 'fichiers' mais enfin merci pour l'idée du "tutu" ca va me faire penser au "Lac des cygnes" où il y a de jolies choses et me faire oublier les pythons et autres reptiles.

  5. #5
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 64
    Par défaut
    Citation Envoyé par Arioch Voir le message
    Ca m'arrive de glisser mes imports dans le __init__.py à côté de mes classes.
    Merci, mais je n'utilise pas de Classes dans ce projet, lequel est un truc très technique que je réécris en Python en partant de que j'avais déjà écrit en objectiveC sur Mac.
    Pour vous et pour wiztricks (qui m'a rendu de fiers service) il s'agit d'un boitier électronique doté de trente sondes que l'on peut connecter à différents points d'un montage électronique quelconque. On affecte des plages de valeurs à chacune de ces sondes, et quand on test le circuit électronique en question, le scripts crée des fichiers qui indiquent les variations de tensions/courants aux points où sont branchés les sondes. Le système marche tellement bien que quelques amis à qui j'en ai parlé ont souhaité posséder le programme. Mais comme ils sont sur Windaube, Python semblait s'imposer.

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 726
    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 726
    Par défaut
    Dans les idées de rangements, il n'est pas interdit de faire un import à l'intérieur d'une fonction (s'il n'est pas utilisé ailleurs dans le module): ça réduit un peu la liste des import en tête de module.
    note: on peut aussi le faire pour "optimiser". "from os import path" crée la variable locale "path" et ce sera plus rapide à récupérer que rechercher "path" dans le dictionnaire "os".

    Citation Envoyé par azad2b
    Seulement, j'ai des choses dans par exemple 'fonctions' qui accèdent à 'fichiers'
    On peut considérer un module comme une classe et y regrouper les fonctions qui tournent autour des mêmes types d'objets ou des mêmes objets.

    Parfois on se retrouve avec des fonctions "inclassables": pas assez nombreuses pour mériter un module et suffisamment atypiques pour être rangés avec d'autres.
    J'ai donc souvent un module misc(ellaneous).py (=divers en français).

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

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 830
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 830
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par azad2b Voir le message
    La question est simple*: Puis_je ne déclarer ces importations que dans un seul script, et dans lequel*? de façon à ce que tout ce beau monde puisse en profiter selon ses besoins. Ou à contrario, importer tout dans chacun des modules*?
    Si tu crées une librairie "toto" dans un dossier "libToto", ce dossier doit impérativement contenir un fichier __init__.py pour que le dossier "libToto" soit importable. Tu peux parfaitement mettre les imports utilisés par libToto dans ce "__init__.py". Ainsi tous les scripts qui utilisent libToto auront les imports qu'il faut.
    Mais un souci inhérent à cette façon de faire, c'est quand le projet évolue et qu'une librairie qui était utile avant ne l'est plus. Sauf que cet import n'étant pas vraiment écrit dans le script qui évolue, tu ne le vois pas et tu l'oublies. Et il continue à être importé pour rien.

    Maintenant, a l'exception de librairies très spécifiques (ex PyQt pour laquelle le "__init__" de mon dossier "libIHM" importe QtCore, QtGui et QtWidgets) je fais mes imports dans mes scripts. Si un script a besoin de decimal, alors il l'importe. Si deux scripts ont besoin tous deux de decimal alors tous les deux l'importent même si les deux font partie de la même librairie de mon projet. Et si demain l'un des deux n'en a plus besoin alors je supprime son import.

    Bref autant de façons de faire différentes que de développeurs différents. Mais c'est parce que chaque point de vue possède autant d'avantages que d'inconvénients donc chacun essaye de programmer en fonction de ce qu'il préfère comme avantage ou de ce qu'il craint le moins comme inconvénient. Perso pour faire le ménage je te conseillerais de tout réécrire. Tu crées un dossier neuf, et tu y recopies chaque script de l'ancien dossier. En commençant par les fonctions les plus bas niveau (celles qui n'ont besoin d'aucune autre) et en les testant une à une. C'est comme ça que je procède quand je veux passer un projet Python2 sous Python3.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Réponses: 0
    Dernier message: 30/03/2011, 09h49
  2. [XL-2003] liste des fichier importé dans le fichier excel
    Par dlight dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/05/2010, 01h26
  3. Liste des objets à recompiler suite à import
    Par tibal dans le forum Administration
    Réponses: 7
    Dernier message: 02/04/2008, 20h48

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