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 :

Structure pour un projet python


Sujet :

Python

  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2013
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2013
    Messages : 156
    Par défaut Structure pour un projet python
    Bonjour,

    Aujourd'hui je met un gros coup de décrassage sur un gros projet sur lequel je travail.
    J'ai pris aussi un peu de temps pour réorganiser la structure de mon projet. J'ai donc parcouru le web à la recherche des bonnes pratiques et j'ai trouvé quelques ressources intéressantes
    https://jeffknupp.com/blog/2013/08/1...the-right-way/
    https://github.com/audreyr/cookiecutter-pypackage

    Je vois beaucoup de questions de code sur ce forum(Python), mais assez peu finalement sur l’environnement de travail, les outils, la méthodologie et l'organisation autant pour la phase de développement que pour le déploiement.
    Je sais que certains points sont bien sur spécifiques au projet, et certains autres sont assez subjectifs (par exemple la stratégie d'organisation des tests unitaires), mais je pense qu'on peu quand même se mettre d'accord sur des bonnes pratiques et sur un template de base.

    C'est dans cet optique que je crée ce nouveau thread afin que les gens puisse communiquer sur leurs pratiques et débattre sur les solutions proposées


    Voici mon projet réorganisé:

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    MON_PROJET_REPO
        - binaries/ 
        - docs/ (sphinx)
        - mon_projet/
            - components/ (composants réutilisables)
                - component_1/
                    - unit_tests/
                    - component_1.py
                - ...
            - locale/
            - mon_projet/
                - truc_1/
                     - unit_tests/
                     - truc_1.py
                - ...
            - main.py
        - icons/ (logo, ...)
        - py_venv/ (virtualenv)
        - requirements/
            - prod.txt
            - test.txt
            - dev.txt
        - scripts/ (innosetup, sphinx, .bat ...)
        - .gitignore
        - .gitmodules
        - .travis.yml
        - HISTORY.md (Historique des changements)
        - license.rtf
        - Makefile
        - MANIFEST.in
        - README.md
        - requirements.txt
        - setup.cfg
        - setup.py
        - tox.ini
    Personnellement j'utilise:
    Virtualenv + virtualenvwrapper
    Innosetup
    Git
    Sphinx
    Tox
    Travis / Jenkins

    (Je ferai une maj demain pour rajouter quelques détails - c'est l'heure de quitter le boulot )

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

    Citation Envoyé par IPreferCSharp Voir le message
    Je vois beaucoup de questions de code sur ce forum(Python), mais assez peu finalement sur l’environnement de travail, les outils, la méthodologie et l'organisation autant pour la phase de développement que pour le déploiement.
    Côté Python, c'est documenté dans le chapitre Distributing Python Modules de la documentation. Pour les autres outils, on est dans le développement "en général" et la rubrique ad hoc est plutôt ALM (IDE, gestion de configuration,...) et c'est rarement spécifique à Python.

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

  3. #3
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    En ce qui me concerne, voilà comment je m'organise pour mes projets Python graphiques (PyQt):

    projet => répertoire du projet

    **base => répertoire contenant les données gérées (exemple: une base sqlite)
    en production, les données gérées ne peuvent pas être dans le répertoire d'installation du programme!

    **programme => répertoire contenant tous les codes du programme
    ****@documodule => programme perso de documentation et d'inspection des codes python
    ****aide => répertoire contenant tous les fichiers d'aide écrits en html avec Kompozer
    ****apropos => répertoire contenant la fenêtre graphique "à propos" du projet
    ****biblio => répertoire "package" contenant tous les modules généraux, y compris les widgets personnalisés
    ****build => tous les programmes "exe" créés par cx_freeze
    ****fenetre1 => répertoire contenant la fenêtre graphique 1
    ******fenetre1_ui.ui => fichier xml créé par qtdesigner
    ******fenetre1_ui.bat => fichier bat pour créer la fenêtre python avec pyuic5
    ******fenetre1_ui.py => fichier python créé par pyuic5 à partir du fichier xml
    ******fenetre1.py => fichier py de la fenêtre qui importe fenetre1_ui.py
    ****fenetre2 => répertoire contenant la fenêtre graphique 2
    ****fenetre3 => répertoire contenant la fenêtre graphique 2
    ****etc...
    ****programme1.pyw => code du programme pouvant être appelé directement
    ****programme1_cx_freeze.bat => lancement du traitement cx_freeze
    ****programme1_cx_freeze_setup.py => fichier de configuration pour le traitement par cx_freeze
    ****programme2.pyw
    ****programme3.pyw
    ****etc...
    ****designer.pyw => programme permettant d'appeler le qtdesigner avec les widgets personnalisés du projet

    J'utilise eclipse + pydev pour les développements.

    Au fur et à mesure de mes développements, j'identifie de nouveaux modules personnels réutilisables que j'intègre dans le répertoire/package biblio quand j'en ai besoin. Ça me consomme un peu plus de temps d'étude à chaque fois, mais ça me permet d'aller plus vite dans les développements suivants. Par exemple, j'ai des modules personnels pour: csv, ini, ftp, disque, zip, pdf, html, etc...

    En plus, j'utilise pylint pour déverminer mes codes Python.

    Mais je n'ai pas les mêmes contraintes qu'une équipe de développement: je suis tout seul! Il y a donc des choses que je ne fais pas mais que des pros devraient faire => voir les bonnes pratiques professionnelles!

Discussions similaires

  1. Quel choix pour mon projet ? (Python or not Python)
    Par samue101 dans le forum Débuter
    Réponses: 3
    Dernier message: 09/06/2013, 22h56
  2. [AC-2010] Structure pour projet de gestion de devis
    Par chatomon dans le forum Modélisation
    Réponses: 0
    Dernier message: 26/02/2012, 13h46
  3. Quelle structure de données pour mon projet ?
    Par stallaf dans le forum Langage
    Réponses: 4
    Dernier message: 13/04/2010, 17h12
  4. Devellopeur pour Projet Python
    Par ju_bicycle dans le forum Général Python
    Réponses: 0
    Dernier message: 24/03/2010, 16h36

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