2016-10-30 2 views
1

J'ai créé un package à utiliser avec django, dont la fonction principale est accessible via une commande de gestion. Cependant, afin de rendre les commandes de gestion accessibles, django semble insister pour que le paquet soit listé comme une application dans INSTALLED_APPS dans settings.py.Commande Django add management sans installation en tant qu'app

Cette application est simplement utilisée dans le cadre de notre processus de construction tout en effectuant des tests d'intégration. Il n'a même pas besoin d'être installé sur des machines de développement, et encore moins de finir dans notre environnement de production. Cependant, comme il doit être dans les applications installées de settings.py, il s'étend également à requirements.txt, car il casse soudainement les builds partout où il n'est pas installé.

Existe-t-il un moyen d'injecter une commande de gestion sans installer le package en tant qu'application complète?

Alternativement: existe-t-il un moyen standard/recommandé de rendre une commande disponible à tox d'une manière différente de celle obtenue par une commande de gestion?

+0

En regardant le code source: https://github.com/django/django/blob/master/django/core/management/__init__.py Les commandes de gestion sont assez restrictives - dans le sens où elles ne permettent que des ins intégrés ou des applications définies dans INSTALLED_APPS – karthikr

+0

Juste, j'avais peur de cela (maintenant que vous le mentionnez, en regardant la source aurait dû être mon premier essai). Existe-t-il une approche standard différente pour rendre une commande disponible à «tox», en plus d'une commande de gestion? – Joost

+0

Une approche que j'ai prise dans le passé - bien que pas très élégant est d'avoir un répertoire 'scripts /' et appelle le 'django.setup()' pour l'enregistrer comme un script django - il a cependant ses inconvénients. – karthikr

Répondre

0

Une solution consiste à avoir un fichier settings.py distinct pour le processus de génération qui ajoute l'application contenant cette commande à INSTALLED_APPS. Ensuite, vous pouvez exécuter manage.py mycommand --settings=build_settings ou autre.

Les paramètres fichier lui-même peut être aussi simple que:

from main_settings import * 
INSTALLED_APPS += ['myapp']