我有一个独立的脚本,我需要在Django环境中运行。它使用Database Orm等。当我尝试运行它时,它开始抱怨from .generators import thread_generator
。所以,很明显它不在Django环境中。我用Google搜索并试了很多东西但仍然没有成功。目前,我正在尝试以下没有成功。我甚至不确定bot_server.local
是否正确或是否bot_server.settings
。但是,我在设置中使用local.py
。我无法将其作为命令运行,因为对于它的使用,我需要将其作为独立脚本运行。我需要将其作为脚本中的永久物,而不是具有临时性的shell环境。
from functools import wraps
import sys
import os
import datetime
import base64
import json
from django.db import connection
from django.core.management.base import BaseCommand, CommandError
from .generators import thread_generator
from .do_request import do_request
from .models import Employee, ThreadVault
if __name__ == '__main__':
os.environ['DJANGO_SETTINGS_MODULE'] = "bot_server.local"
sys.path.append("/home/git/bot_server/bot_server")
答案 0 :(得分:3)
要运行独立脚本,您只需在开始编写脚本之前编写此代码。执行独立脚本的问题是找不到django环境所以要提供这个,我们需要 追加设置文件。
//Start your code here
import os, sys
from os import path
proj_path = "project_path\project_name"
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project_name.settings")
sys.path.append(proj_path)
os.chdir(proj_path)
from django.core.wsgi import get_wsgi_application
from app1.models import *
from app2.models import model_name
from app3.models import model_name1, model_name2
application = get_wsgi_application()
//Start your script from here
答案 1 :(得分:2)
答案非常简单......只需粘贴manage.py中的内容:
if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "bot_server.settings.local")
from django.core.management import execute_from_command_line
我读过的所有帖子,我都不相信以前没有提到过。
答案 2 :(得分:1)
是的,这个答案很简单
manage.py文件如下
#!/usr/bin/env python
from settings.common import PROJECT_ROOT
import os
import sys
os.chdir(PROJECT_ROOT)
sys.path.insert(0, os.path.abspath(os.path.join(PROJECT_ROOT, "..")))
for i, arg in enumerate(sys.argv):
if arg.startswith("--site"):
os.environ["MEZZANINE_SITE_ID"] = arg.split("=")[1]
sys.argv.pop(i)
if __name__ == "__main__":
settings_module = "settings.common"
os.environ.setdefault("DJANGO_SETTINGS_MODULE", settings_module)
from django.core.management import execute_from_command_line
execute_from_command_line(sys.argv)