9

Venant du développement Java où les outils de gestion de projets et de build abondent, j'aimerais savoir ce qui est disponible pour Django. Je voudrais vraiment utiliser quelque chose comme Maven pour construire des choses, mais y a-t-il une autre façon préférée de le faire?Gestion de projet/outils de construction pour un projet Django?

Je suis vraiment pour ce qui suit:

  • bâtiment de ligne de commande: mvn install est si facile et cool.
  • Exécution de tests en ligne de commande. Je voudrais intégrer cette application dans quelque chose comme Hudson pour l'intégration continue, puisque je suis hardcore comme ça.
  • Déploiement des médias au serveur de test local (JS, CSS, images, etc.)

Est-ce possible actuellement avec Maven ou un autre outil? Je me lance dans un très gros projet ici et j'aimerais avoir un système de gestion de projet/build de projet comme Maven pour aider le projet à grandir au fil du temps.

Répondre

7

Deux outils viennent à l'esprit qui sont les deux outils de python génériques - dont ils ont besoin fonctionnent pas avec Django spécifiquement:

  • Fabric. Nous utilisons cela; Cela nous permet d'écrire des commandes à distance comme si nous étions dans SSH, de télécharger du code, etc. Ce n'est pas ce que vous ne pouvez pas faire et parce que c'est un script bash écrit en python, il est très facile de démarrer. Mais c'est aussi un script bash écrit en python, ce qui signifie que vous pouvez importer des parties de votre application django, lancer vos tests ou faire tout ce que python peut faire dans le processus d'exécution de votre déploiement.
  • Buildout. Je ne l'ai pas utilisé, mais notre développeur django frontent me dit que c'est absolument l'outil à utiliser. À la conjecture, il s'agit soit de la même idée soit d'un équivalent un peu plus abstrait, plus python.

Je suis sûr qu'il existe d'autres paquets disponibles. Le meilleur conseil que je peux vous donner est de les évaluer brièvement et de choisir celui qui correspond le mieux à votre scénario/style de travail d'équipe. Notez qu'il s'agit principalement d'outils de déploiement - les compilations en python n'ont pas vraiment de sens, puisque vous ne compilez pas de code python.

En termes de choses liées à CI, il y a trois commandes de django vous devez savoir sur:

  • ./manage.py test exécute vos tests à partir de tous les tests.py fichiers. Ce sont essentiellement des améliorations spécifiques à django à unittest, un paquetage python.
  • ./manage.py collectstatic collecte les fichiers statiques dans un répertoire de votre choix; très utile pour tirer tous les bits ensemble pour exister sur un serveur multimédia statique. Jetez un oeil à the static files howto pour savoir comment cela fonctionne.
  • Vous avez besoin de South pour celui-ci, ./manage.py schemamigration app --auto && ./manage.py migrate app - cela s'applique au modèle sql sous-jacent. Fondamentalement, si vous changez juste un modèle et n'utilisez pas le sud, Django sera très contrarié parce que le nouveau champ ne sera pas mappé à l'ancien schéma sql et il ne pourra pas persister votre modèle. Les migrations de schémas, prises en charge par le sud, vous permettent de mettre à niveau une base de données existante et remplie. Cela vaut la peine de le faire à la main avant d'automatiser.
  • Je devrais également souligner que vous pouvez écrire custom management commands pour exécuter ./manage.py whatever you like. Cela a une bonne quantité de potentiel - J'ai utilisé des commandes de gestion comme la commande à exécuter dans un travail cron, par exemple.Vous pouvez également créer des commandes interactives pour les administrateurs de votre application et, bien sûr, le déploiement et les tests.

La façon dont ils sont gérés dépend vraiment de la configuration dont vous disposez et des outils que vous choisissez.

À la compilation: Le plus proche de construire avec python est geler, a.k.a. py2exe ou cxfreeze qui produisent des binaires. Sachez cependant que tout cela est de stocker python bytecode dans un exe et de le passer à travers l'interpréteur, qui est un objet partagé de toute façon. En outre, vous ne pouvez pas cxfreeze une application django, puisque django utilise lui-même des imports dynamiques qui se produisent au moment de l'exécution et ne peuvent donc pas être évalués par cxfreeze, qui est essentiellement un outil de compilation. Donc, le bâtiment discount comme une tâche qui a besoin de faire. Vous pouvez voir .pyc fichiers apparaissant dans votre répertoire - python convertit votre script python en python bytecode si des modifications ont été apportées depuis le dernier pyc. Si aucune modification n'a été effectuée, il charge le fichier pyc de la dernière fois. Python bytecode est ce qui est exécuté, donc ce n'est pas vraiment une accélération en termes de performance, juste du temps de chargement.

+0

La construction est géniale. Je suis à peu près sûr que c'est exactement ce que je cherche. Merci! –

0

Si vous avez besoin de quelque chose pour gérer et reproduire votre environnement (Django) python, alors je recommanderais de regarder pip avec virtualenv comme alternative à Buildout.

Cette SaltyCrane article décrit l'utilisation de pip avec Django. L'article décrit le processus sur Ubuntu mais nous utilisons une configuration similaire sur Ubuntu et OSX.

Nous avons de l'expérience à la fois avec la pipette et le pip pip trouvé et facile, plus fiable et plus facile à l'échelle que la construction.

Questions connexes