在Django外运行Python脚本

38 投票
7 回答
27964 浏览
提问于 2025-04-15 13:46

我有一个脚本,它使用了Django的ORM功能,还有其他一些外部库。我想在不使用Django的情况下运行这个脚本,也就是直接从命令行执行。

补充一下:现在我可以通过访问一个网址来启动它……

我该如何设置环境来实现这个呢?

7 个回答

14

你只需要可导入的设置和正确的 Python 路径。最简单的方法就是通过设置合适的环境变量来实现,比如:

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

还有其他方法,比如调用 settings.configure() 和之前提到的 setup_environ(),这些都是 James Bennett 在某个博客文章中描述的。

21
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

当然可以!请把你想要翻译的内容发给我,我会帮你把它变得更简单易懂。

43

最简单的方法是把你的脚本设置为一个 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 ...

把这些代码放到一个文件里,放在你任意一个应用的管理/命令/yourcommand.py 目录下(每个目录里要有一个空的 __init__.py 文件),这样你就可以通过 ./manage.py yourcommand 来调用你的脚本了。

如果你使用的是 Django 1.10 或更高版本,NoArgsCommand 已经不推荐使用了。请改用 BaseCommand。https://stackoverflow.com/a/45172236/6022521

撰写回答