Maison > Article > développement back-end > Pourquoi devrions-nous concevoir une bonne structure de répertoires ?
Lors de la conception d'un site Web, vous devez créer à l'avance un dossier sur le disque dur de votre ordinateur comme point de départ de votre travail, puis créer plusieurs sous-dossiers sous le dossier pour former une structure de répertoires raisonnable afin que différents types de Les fichiers sont stockés sur le site.
La structure du répertoire est un problème qui est facilement négligé dans la construction de sites Web. Les débutants planifient et créent rarement des sous-répertoires à volonté. Même le nom du répertoire est facile à trouver par la suite, même s'ils oublient pourquoi ce répertoire a été créé et préparé. . Quels types de fichiers sont stockés. À proprement parler, les visiteurs n'auront pas une idée claire de la qualité de la structure du répertoire, mais cela aura un impact important sur la maintenance du site Web lui-même ainsi que sur l'expansion et la transplantation du contenu futur.
Pourquoi devrions-nous concevoir la structure des répertoires ?
« Concevoir la structure des répertoires du projet » est la même chose que « codage style" "Pareil, c'est une question de style personnel. Il y a toujours eu deux attitudes à l'égard de cette norme de style :
1. Un type d'étudiants estime que cette question de style personnel n'est "pas pertinente". La raison en est que tant que le programme peut fonctionner, les problèmes de style ne sont pas du tout un problème
2. Un autre type d'étudiants pense que la standardisation peut mieux contrôler la structure du programme et faire le programme plus efficace. Lisibilité;
Je suis plus enclin à ce dernier, car je suis une victime directe des pensées et des comportements des étudiants de l'ancienne classe. J'ai déjà maintenu un projet très difficile à lire. Sa logique de mise en œuvre n'était pas compliquée, mais il m'a fallu très longtemps pour comprendre ce qu'il voulait exprimer. Depuis, j'ai personnellement des exigences très élevées pour améliorer la lisibilité et la maintenabilité du projet. La « structure de répertoires du projet » appartient en fait à la catégorie « lisibilité et maintenabilité ». Nous concevons une structure de répertoires de niveau clair pour atteindre les deux points suivants :
1. Haute lisibilité : Personnes. ceux qui ne connaissent pas le code de ce projet peuvent comprendre la structure des répertoires en un coup d'œil et savoir quel est le script de démarrage du programme, où se trouve le répertoire de test, où se trouve le fichier de configuration, etc. Cela permet de comprendre le projet très rapidement ;
2. Haute maintenabilité : Après avoir défini les règles d'organisation, le mainteneur peut clairement savoir quels nouveaux fichiers et codes doivent être ajoutés. Dans quel répertoire doit-il être ajouté ? est-il placé ? L'avantage est qu'au fil du temps, à mesure que la taille du code/configuration augmente, la structure du projet ne s'encombre pas et reste bien organisée.
Par conséquent, je pense qu'il est nécessaire de maintenir une structure de répertoires claire. De plus, organiser un bon répertoire de projet est en réalité une affaire très simple.
Organisation du répertoire
Il existe déjà quelques idées sur la façon d'organiser une meilleure structure de répertoire de projet Python. structure. Dans cette question sur Stackoverflow, vous pouvez voir les discussions de tout le monde sur la structure des répertoires Python.
Ce qui est dit ici est déjà très bon. Je ne vais pas réinventer la roue et lister différentes méthodes. Ici, je vais parler de ma compréhension et de mon expérience.
En supposant que votre projet s'appelle foo, je suggère que la structure de répertoires la plus pratique et la plus rapide suffit :
Foo/
|-- bin/
| |-- foo
|
|-- foo/
| |-- tests/
| | |-- __init__.py
| | |-- test_main.py
| |
| |-- __init__.py
| |-- main.py
|
|-- docs/
| |-- conf.py
| |-- abc.rst
|
|-- setup.py
|-- requirements.txt
|-- README
Une brève explication :
1. bin/
: Stockez certains fichiers exécutables du projet, vous pouvez bien sûr le nommer script/
ou quelque chose comme ça
2. foo/
: Stocke tout le code source du projet. (1) Tous les modules et packages du code source doivent être placés dans ce répertoire. Ne le placez pas dans le répertoire supérieur. (2) Son sous-répertoire tests/
stocke le code de test unitaire ; (3) L'entrée du programme est mieux nommée main.py;
3. docs/
: stocke certains documents ; 🎜>
4. : Scripts d'installation, de déploiement et d'empaquetage setup.py
5. : Packages Python externes qui stockent les dépendances logicielles ; Liste ; requirements.txt
6. : Document de description du projet. README
De plus, certains forfaits proposent plus de contenu. Par exemple, les fichiers , LICENSE.txt
, etc., je ne les ai pas répertoriés ici, car ces éléments sont principalement nécessaires lorsque le projet est open source. Si vous souhaitez écrire un logiciel open source, vous pouvez vous référer à cet article sur la façon d'organiser les répertoires ChangeLog.txt
Ensuite, permettez-moi de parler brièvement de ma compréhension de ces répertoires et de mes exigences personnelles ;
À propos du contenu du README
Je pense que c'est un fichier que chaque projet devrait avoir , le but est de décrire brièvement les informations du projet et de permettre aux lecteurs de comprendre rapidement le projet.
Il doit expliquer les points suivants :
1. Le positionnement du logiciel, les fonctions de base du logiciel
2. Méthodes d'exécution du code : environnement d'installation, commandes de démarrage, etc. ;
3. Brèves instructions d'utilisation
4 .Description de la structure du répertoire du code, qui peut expliquer les principes de base du logiciel plus en détail
5. Description des questions fréquemment posées ;
Je pense que les points ci-dessus sont meilleurs . Aux premiers stades du développement logiciel, étant donné que le contenu ci-dessus peut être flou ou changer au cours du processus de développement, il n'est pas nécessaire de compléter toutes les informations au début. Mais une fois le projet terminé, un tel document doit être rédigé. README
Vous pouvez vous référer à la méthode d'écriture de Readme dans le code source Redis, qui décrit brièvement mais clairement la fonction Redis et la structure du code source.
À propos des fichiers requis.txt et setup.py
Setup.py
De manière générale, utilisez pour gérer les problèmes d'empaquetage, d'installation et de déploiement de code. La méthode d'écriture standard de l'industrie consiste à utiliser les outils de configuration de l'outil d'emballage populaire de Python pour gérer ces éléments. Cette approche est couramment utilisée dans les projets open source. Cependant, l'idée centrale ici n'est pas d'utiliser des outils standardisés pour résoudre ces problèmes, mais de dire que setup.py
un projet doit disposer d'un outil d'installation et de déploiement capable d'installer rapidement et facilement l'environnement et le code sur une nouvelle machine. . Déployez et exécutez le programme.
J'ai déjà traversé ce piège.
Lorsque j'ai commencé à écrire des projets en Python, le processus d'installation de l'environnement, de déploiement du code et d'exécution du programme était entièrement effectué manuellement : .
1. Lors de l'installation de l'environnement, j'oublie souvent d'ajouter un nouveau package Python récemment. Par conséquent, le programme tourne mal dès que je l'exécute en ligne
<.> 2. Le problème de dépendance de version des packages Python. Parfois, nous utilisons une version du package Python dans notre programme, mais le package officiel est déjà le plus récent et la mauvaise peut être installée via une installation manuelle
3. S'il existe de nombreux packages dépendants, il faut beaucoup de temps pour installer ces dépendances une par une4. Lorsque les nouveaux étudiants commencent à écrire des projets ; , il est très difficile d'exécuter le programme, car vous risquez souvent d'oublier comment installer diverses dépendances.
Vous pouvez automatiser ces choses pour améliorer l'efficacité et réduire la probabilité d'erreurs. "Automatiser les choses complexes, et les choses qui peuvent être automatisées doivent être automatisées." La documentation de setuptools est relativement volumineuse Si vous êtes nouveau dans ce domaine, il n'est peut-être pas facile de trouver le point d'entrée. La façon d'apprendre la technologie est de voir comment les autres l'utilisent. Vous pouvez vous référer à un framework Web en Python et à la façon dont flask est écrit : setup.py. setup.py
) au lieu de . deploy.sh
setup.py
Requirements.txt
Le but de ce fichier est :1. Pratique pour les développeurs qui souhaitent maintenir les dépendances des progiciels. Ajoutez de nouveaux packages pendant le processus de développement à cette liste pour éviter de manquer des packages logiciels lors de
l'installation des dépendances setup.py
Le format de ce fichier est que chaque ligne contient une description de dépendance de package, généralement au format
. La condition est que ce format puisse être reconnu par , afin qu'il puisse être facilement utilisé flask>=0.10
pour installer toutes les dépendances du package Python. Instructions de format spécifiques : Cliquez ici. pip
pip install -r requirements.txt
Notez que dans la structure de répertoires ci-dessus,
n'est pas placé dans le répertoire du code source. Placez-le plutôt dans le répertoire : conf.py
docs/
1. Le fichier de configuration est écrit in Dans un ou plusieurs fichiers python, comme conf.py ici
2. Quel module du projet utilise ce fichier de configuration directement sous la forme de
Utiliser la configuration dans le code . import conf
1. Cela rend les tests unitaires difficiles (car le module repose sur une configuration externe) ;
2. D'autre part, le fichier de configuration sert d'interface permettant à l'utilisateur de contrôler le programme, et l'utilisateur doit pouvoir spécifier librement le chemin du fichier
3. La réutilisabilité des composants du programme est trop faible, car ce code codé en dur qui traverse tous les modules fait que la plupart des modules s'appuient sur le fichier
; conf.py
Par conséquent, je pense que la meilleure façon d'utiliser la configuration est :
1. La configuration des modules peut être configurée de manière flexible et n'est pas affectée par les fichiers de configuration externes ;
2. La configuration du programme peut également être contrôlée de manière flexible.
Ce qui peut soutenir cette idée, c'est que les étudiants qui ont utilisé nginx et mysql savent que les programmes nginx et mysql peuvent spécifier librement les configurations utilisateur.
Par conséquent, les fichiers de configuration ne doivent pas être utilisés directement import conf
dans le code. Le conf.py
dans la structure de répertoires ci-dessus est un exemple de configuration, et non un fichier de configuration codé en dur directement référencé dans le programme. Vous pouvez laisser le programme lire le contenu de la configuration en spécifiant le chemin de configuration pour le paramètre de démarrage main.py
. Bien sûr, vous pouvez remplacer le conf.py
ici par un nom similaire, tel que settings.py
. Vous pouvez également utiliser du contenu dans d'autres formats pour écrire des fichiers de configuration, tels que settings.yaml
et autres.
Dans le module, le problème d'appel de différents fichiers ne peut être réalisé que sous le répertoire du même niveau. S'ils sont dans des modules de niveaux différents, les variables d'environnement doivent être configurées pour que. les programmes peuvent s'exécuter au même niveau sous la structure de répertoires.
Les étapes pour configurer les variables d'environnement sont les suivantes :
'''Configurer les variables d'environnement car elles sont dans différents répertoires Pour importer, vous devez d'abord configurer les variables d'environnement pour que les programmes puissent s'appeler dans le même état de répertoire'''
import sys,os
''' os .path.abspath est le chemin absolu du fichier '''
data = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath( __file__) )))
print(data)
sys.path.append(data)
Tout d'abord, importer les modules sys, os, __file__ consiste à obtenir le nom de fichier du fichier actuel ; os.path.abspath() consiste à obtenir le chemin absolu du fichier actuel ; ; os.path.dirname() Il s'agit d'obtenir le chemin de niveau supérieur du chemin du fichier actuel ; sys.path.append() consiste à ajouter le chemin du fichier actuel au chemin du fichier pour réaliser la configuration du chemin du fichier et réaliser l'appel au même niveau.
Ce qui précède est le type de fichier complet d'une application. Différents modules fonctionnels sont stockés dans différents fichiers. une entrée principale du programme, en effet, lorsque l'on appelle l'entrée principale, la variable d'environnement est l'emplacement de l'entrée principale du programme. À l'avenir, vous devrez écrire du code de manière standardisée et essayer d'appeler entre différents modules ; regardons un type de framework Web simple :
Tout d'abord, ce qui précède est un framework DJ. :
--backend front-end, utilisé pour stocker les modules de vérification de base de données et les modules logiques
--module de configuration du fichier de configuration, utilisé ; pour stocker les informations de configuration du fichier ;
--frontend est le frontal
--user_main.py est l'entrée principale du programme ; et le module d'exécution du programme.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!