我有一個腳本,它使用Django ORM功能以及其他外部庫,我想在Django之外運行(即從命令行執行)。在Django之外運行Python腳本
編輯:目前,我可以通過導航到一個URL啓動它...
如何設置這個環境?
我有一個腳本,它使用Django ORM功能以及其他外部庫,我想在Django之外運行(即從命令行執行)。在Django之外運行Python腳本
編輯:目前,我可以通過導航到一個URL啓動它...
如何設置這個環境?
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
所有你需要的是可導入的設置和正確設置python路徑。在最原始的形式,這可以通過設置適當的環境變量,像這樣做:
$ DJANGO_SETTINGS_MODULE=myproject.settings PYTHONPATH=$HOME/djangoprojects python myscript.py
還有其他的方法,比如調用settings.configure()
和已經提到some blog post由詹姆斯·貝內特描述setup_environ()
。
+1:一直這樣做。我們有許多使用ORM的批處理作業。 – 2009-08-21 10:35:56
「myscript.py」中的簡單模型導入工作嗎? – jgomo3 2012-10-30 22:46:49
最簡單的方法是將您的腳本設置爲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
現在你可以打電話給你的腳本。
這是我使用的選項,假設命令與您的項目有關。 – DaveJ 2009-08-21 12:37:35
運行時出現「NameError:name'make_option'未定義'錯誤 - 缺少某些內容? – 2011-12-30 13:15:09
你可能需要'從頂部的optparse import make_option'。 – 2011-12-30 13:20:34
注意有關導入設置和使用setup_environ的建議已被Django 1.4棄用。
Django Github上有一個線程描述了why this was done。
還有一些其他的選擇,但他們中的許多人似乎對我很討厭。我的首選方法往往是包括腳本函數作爲extended command of manage.py
使用runscript
從django-extensions:python manage.py runscript <my_script>
爲了做到這一點,你需要:
pip install django-extensions
scripts
。這可以位於根目錄或特定的應用程序中。一個空白init文件初始化目錄:
touch scripts/__init__.py
將你的腳本在這個目錄中,幷包括run()
功能。例如:
#hello.py
def hello():
return "Hello, World"
def run():
print hello()
與python manage.py runscript hello
運行腳本參考docs和helpful blog post的更多細節。
不適用於python 3.6。 – 2017-11-23 14:15:10
我喜歡下面的命令添加到我的項目:
myproject/management/commands/run-script.py
:
from django.core.management.base import BaseCommand, CommandError
import imp
import sys
class Command(BaseCommand):
help = """Run a non-django script with django settings."""
args = "<path_to_script.py> [<script_args>...]"
def handle(self, *args, **options):
if len(args) == 0:
raise CommandError("Path to script to run is required")
sys.argv = list(args)
imp.load_source("__main__", args[0])
然後,我可以運行自定義腳本,例如:
./manage.py run-script /path/to/myscript.py --opt=value arg1 arg2
[執行Python的可能的複製腳本從Django殼](http://stackoverflow.com/questions/16853649/executing-python-script-from-django-shell) – 2016-06-05 10:11:08
最清潔的解決方案之一是在這裏提供的:ht tps://stackoverflow.com/a/39724171/4454597 – 2017-05-26 12:12:40