在Django之外运行Python脚本

gee*_*jay 35 python django

我有一个脚本,它使用Django ORM功能,以及其他外部库,我想在Django之外运行(即,从命令行执行).

编辑:目前,我可以通过导航到URL来启动它...

如何为此设置环境?

Dan*_*man 40

最简单的方法是将脚本设置为manage.py子命令.这很容易做到:

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 ...
Run Code Online (Sandbox Code Playgroud)

将它放在一个文件中,在管理/命令/ yourcommand.py下的任何应用程序中(__init__.py每个文件中都有空文件),现在你可以调用你的脚本了./manage.py yourcommand.

  • 也许我错过了,但似乎没有人指出文档:https://docs.djangoproject.com/en/dev/howto/custom-management-commands/ (7认同)
  • 您可能需要从顶部的optparse import make_option`. (3认同)

小智 20

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
Run Code Online (Sandbox Code Playgroud)

  • 这在很久以前的Django 1.4中被弃用了. (2认同)

zgo*_*oda 13

您只需要可导入的设置并正确设置python路径.在最原始的形式中,这可以通过设置适当的环境变量来完成,例如:

$ DJANGO_SETTINGS_MODULE=myproject.settings PYTHONPATH=$HOME/djangoprojects python myscript.py
Run Code Online (Sandbox Code Playgroud)

还有其他一些方法,比如在一些博客文章settings.configure()setup_environ()称詹姆斯贝内特描述的已经提到的内容.


Jam*_*ico 10

请注意,Django 1.4已弃用有关导入设置和使用setup_environ的建议.

Django Github上有一个线程描述了为什么这样做了.

还有一些其他的选择,但其中许多似乎对我来说是hackish.我首选的方法通常是将脚本函数作为manage.py扩展命令


abe*_*ein 10

使用runscriptDjango的扩展:python manage.py runscript <my_script>

为此,您需要:

  1. pip install django-extensions
  2. 创建一个名为的目录scripts.它可以位于根目录或特定应用程序中.
  3. 使用空白init文件初始化目录:

    touch scripts/__init__.py

  4. 将脚本放在此目录中,并包含一个run()函数.例:

    #hello.py
    
    def hello():
        return "Hello, World"
    
    def run():
        print hello()
    
    Run Code Online (Sandbox Code Playgroud)
  5. 运行脚本 python manage.py runscript hello

有关详细信息,请参阅文档有用的博客文章.