60 votes

Comment utiliser Python pour un développement à grande échelle?

Je serais intéressé d'en apprendre plus sur le développement à grande échelle en Python et en particulier dans comment voulez-vous maintenir une large base de code?

  • Lorsque vous faites de l'incompatibilité des modifications à la signature d'une méthode, comment trouvez-vous tous les endroits où cette méthode est appelée. En C++/Java, le compilateur va le trouver pour vous, comment faites-vous en Python?

  • Lorsque vous apportez des modifications profondes à l'intérieur du code, comment voulez-vous savoir quelles opérations un exemple fournit, puisque vous n'avez pas de statique type de recherche?

  • Comment gérez-vous/éviter les erreurs de frappe (fautes de frappe)?

  • Sont UnitTest est utilisé comme un substitut pour vérifier le type statique?

Comme vous pouvez le deviner, j'ai presque seulement travaillé avec les langages statiquement typés (C++/Java), mais je voudrais essayer mes mains sur Python pour les plus grands programmes. Mais j'ai eu une très mauvaise expérience, il y a longtemps, avec le clipper (dBase) de la langue, qui a également été typées dynamiquement.

66voto

e-satis Points 146299

Ne pas utiliser un tournevis comme un marteau

Python n'est pas un langage statiquement typé, alors n'essayez pas de l'utiliser de cette façon.

Lorsque vous utilisez un outil spécifique, vous l'utilisez pour ce qu'il a été construit. Pour Python, cela signifie:

  • Duck-typing : pas de vérification de type. Seul le comportement de la matière. Par conséquent, votre code doit être conçu pour utiliser cette fonctionnalité. Une bonne conception des moyens de signatures génériques, pas de dépendances entre les composants, les haut niveaux d'abstraction.. Donc si vous changez quelque chose, vous n'aurez pas à changer le reste du code. Python ne vais pas me plaindre non plus, que ce qu'il a été construit pour les. Les Types ne sont pas un problème.

  • Énorme bibliothèque standard. Vous n'avez pas besoin de changer toutes vos appels dans le programme si vous utilisez les fonctions standard, vous n'avez pas codé toi-même. Et Python venir avec piles incluses. Je garde la découverte de tous les jours. Je n'avais aucune idée du nombre de modules que je pouvais utiliser quand j'ai commencé et a essayé de recréer des trucs comme tout le monde. C'est OK, vous ne pouvez pas obtenir tout cela dès le début.

Vous n'avez pas écrit en Java, C++, Python, PHP, Erlang, que ce soit, de la même manière. Ils sont de bonnes raisons pourquoi il ya de la place pour chacun de tant de langues différentes, ils ne font pas les mêmes choses.

Les tests unitaires ne sont pas un substitut

Les tests unitaires doivent être réalisées avec n'importe quelle langue. La plus célèbre bibliothèque de tests unitaires (JUnit) est de Java monde!

Cela n'a rien à voir avec les types. Vous vérifiez les comportements, encore une fois. Vous éviter des ennuis avec la régression. Vous vous assurer que votre client, vous êtes sur les pistes.

Python pour les projets à grande échelle

Langues, bibliothèques et frameworks n'est pas à l'échelle. Architectures faire.

Si vous concevez une solide architecture, si vous êtes en mesure de le faire évolue rapidement, puis il sera mis à l'échelle. Les tests unitaires de l'aide, automatique code de vérification. Mais ils sont tout de filets de sécurité. Et les petits.

Python est particulièrement adapté pour les grands projets, car elle met en application les bonnes pratiques et a beaucoup de d'habitude les modèles de conception intégré. Mais encore une fois, ne pas l'utiliser pour ce qu'il n'est pas conçu. E. g : Python n'est pas une technologie pour les tâches gourmandes en CPU.

Dans un grand projet, vous êtes plus susceptibles d'utiliser différentes technologies, de toute façon. Comme un SGBD et un langage de templating, ou autre. Python n'est pas une exception.

Vous aurez probablement envie d'utiliser le C/C++ pour la partie de votre code, vous devez être rapide. Ou Java pour s'adapter dans un Tomcat de l'environnement. Ne pas savoir, ne pas s'inquiéter. Python peut jouer avec elles.

En conclusion

Ma réponse peut se sentir un peu grossier, mais ne vous méprenez pas: c'est une très bonne question.

Beaucoup de gens viennent à Python avec les vieilles habitudes. Je vis moi-même en essayant de code Java comme Python. Vous pouvez, mais ne jamais obtenir le meilleur de lui.

Si vous avez joué / voulez-vous jouer avec Python, c'est génial! C'est un outil merveilleux. Mais juste un outil, vraiment.

38voto

rony l Points 1774

J'ai eu une certaine expérience avec la modification de "Frets on Fire", un open source python "Guitar Hero" clone.

comme je le vois, python n'est pas vraiment adapté pour un projet à grande échelle.

Je me suis retrouvé à passer une grande partie du temps de développement, le débogage de problèmes liés à l'affectation de types incompatibles, les choses que statique tapé langues révélera sans effort au moment de la compilation. aussi, depuis les types sont déterminés au moment de l'exécution, en essayant de comprendre le code existant devient plus difficile, parce que vous n'avez aucune idée de quel est le type de paramètre que vous regardez actuellement.

en outre, les appels de fonctions à l'aide de leur nom chaîne de l' __getattr__ construit en fonction est généralement plus fréquente en Python que dans d'autres langages de programmation, ainsi obtenir le graphe d'appel à une fonction un peu dur (bien que vous pouvez appeler des fonctions avec leur nom, dans certains langages statiquement typés).

Je pense que Python brille vraiment à petite échelle, logiciel, prototype rapide développement, et le collage des programmes existants, mais je ne serait pas l'utiliser à grande échelle de projets de logiciel, étant donné que dans ces types de programmes de maintenance devient le véritable problème, et à mon avis, python est relativement faible.

24voto

Thomas Wouters Points 38811

Puisque personne ne l'a souligné pychecker, pylint et outils similaires, je vais: pychecker et pylint sont des outils qui peuvent vous aider à trouver des hypothèses incorrectes (à propos des signatures de fonction, les attributs de l'objet, etc.) Ils ne trouveront pas tout ce qu'un compilateur pourrait trouver dans un langage statiquement typé -- mais ils peuvent trouver des problèmes tels que les compilateurs de ces langues ne pouvez pas les trouver.

Python (et tout typées dynamiquement de la langue) est fondamentalement différent en ce qui concerne les erreurs que vous êtes susceptible de causer et de la façon de les détecter et de les corriger. Il présente de nombreux inconvénients ainsi que des avantages, mais beaucoup (moi y compris) plaide en faveur de Python, la facilité de l'écriture de code (et la facilité de fabrication d'une structure solide) et de la modification de code sans rupture de compatibilité de l'API (l'ajout de nouveaux arguments optionnels, offrant différents objets qui ont le même ensemble de méthodes et d'attributs), il convient parfaitement pour les grandes bases de code.

16voto

Blauohr Points 3279

mon 0.10 EUR:

j'ai plusieurs application en python dans la "production" -de l'état. notre entreprise d'utiliser java, c++ et python. nous développons avec l'ide eclipse (pydev pour python)

unittests sont la clé de la solution pour le problème. (aussi pour c++ et java)

le monde moins sûr de "dynamique de frappe" vous fera moins négligents au sujet de votre code de qualité

PAR LE MOYEN:

le développement à grande échelle ne signifie pas que vous utilisez une seule langue!

le développement à grande échelle utilise souvent une poignée de langues spécifique au problème.

je suis d'accord pour l'-marteau-problème :-)


PS: statique-typage et python

16voto

Kozyarchuk Points 4613

Voici quelques éléments qui m'ont aidé à maintenir un système assez grande en python.

  • La Structure de votre code dans les couches. j'.e séparé biz logique, presentaion de la logique et de vos couches de persistance. Investir un peu de temps dans la définition de ces couches et assurez-vous tout le monde sur le projet est acheté. Pour les grands systèmes de la création d'un cadre qui vous oblige à un certain mode de développement peut être la clé.

  • Les Tests sont essentiels, sans les tests unitaires, vous aurez probablement se retrouver avec une unmanagable base de code plusieurs fois plus rapide qu'avec d'autres langues. Gardez à l'esprit que les tests unitaires sont souvent pas suffisante, assurez-vous que plusieurs d'intégration/tests d'acceptation, vous pouvez exécuter rapidement après un changement important.

  • Utilisation Échouer Rapidement le principe. Ajouter des assertions pour les cas vous vous sentez que votre code peut-être vulnérables.

  • Standard d'enregistrement/d'erreur de manipulation qui va vous aider à accéder rapidement à la question

  • L'utilisation d'un IDE( pyDev fonctionne pour moi) qui fournit un type à l'avance, pyLint/Vérificateur d'intégration qui vous aident à détecter les erreurs communes immédiatement et promouvoir des normes de codage

  • Prudent au sujet de votre importations, ne jamais faire de x import * ou n'relative des importations sans utiliser de .

  • Ne refactoriser, une recherche/remplacement de l'outil avec des expressions régulières est souvent tout ce que vous devez faire déplacer des méthodes/type de classe de refactoring.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X