在Django外运行Python脚本
我有一个脚本,它使用了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