37 votes

Exécution d'un script Python en dehors de Django

J'ai un script qui utilise les fonctionnalités Django ORM, entre autres bibliothèques externes, que je veux exécuter en dehors de Django (c'est-à-dire, exécuté à partir de la ligne de commande).

Edit: Pour le moment, je peux le lancer en accédant à une URL ...

Comment configurer l'environnement pour cela?

42voto

Daniel Roseman Points 199743

La façon la plus simple de procéder consiste à configurer votre script en tant que sous-commande manage.py . C'est assez simple à faire:

 from django.core.management.base import NoArgsCommand, make_option

class Command(NoArgsCommand):

    help = "Whatever you want to print here"

    option_list = NoArgsCommand.option_list + (
        make_option('--verbose', action='store_true'),
    )

    def handle_noargs(self, **options):
        ... call your script here ...
 

Mettez-le dans un fichier, dans n'importe laquelle de vos applications, sous gestion / commandes / votrecommande.py (avec des fichiers __init__.py vides dans chacun) et maintenant vous pouvez appeler votre script avec ./manage.py yourcommand .

21voto

Fausto I. Points 209
from <Project path>          import settings          #your project settings file
from django.core.management  import setup_environ     #environment setup function

setup_environ(settings)

#Rest of your django imports and code go here

14voto

zgoda Points 8549

Tout ce dont vous avez besoin est des paramètres importables et un chemin python correctement défini. Dans la forme la plus brute, cela peut être fait en configurant des variables d'environnement appropriées, comme:

 $ DJANGO_SETTINGS_MODULE=myproject.settings PYTHONPATH=$HOME/djangoprojects python myscript.py
 

Il existe d'autres façons, comme appeler settings.configure() et déjà mentionné setup_environ() décrit par James Bennett dans un article de blog .

13voto

abeinstein Points 338

Utiliser runscript de django-extensions: python manage.py runscript <my_script>

Pour ce faire, vous devez:

  1. pip install django-extensions
  2. Créez un répertoire appelé scripts. Ce peut être situé dans votre répertoire racine, ou dans une application spécifique.
  3. Initialiser le répertoire avec un vide fichier init:

    touch scripts/__init__.py

  4. Placez votre script dans ce répertoire, et d'inclure un run() fonction. Exemple:

    #hello.py
    
    def hello():
        return "Hello, World"
    
    def run():
        print hello()
    
  5. Exécuter le script avec python manage.py runscript hello

Reportez-vous à docs et utile blog pour plus de détails.

11voto

James Errico Points 331

Notez que les suggestions autour de l'importation et utilisation des setup_environ ont été dépréciés avec Django 1.4.

Il y a un thread sur le Django Github décrivant pourquoi cela a été fait.

Il y a encore quelques autres options là-bas, mais beaucoup d'entre eux semblent hackish pour moi. Ma méthode préférée est souvent d'inclure le script de fonctionner comme une étendue de commande de manage.py

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