无法在脚本中导入 django.apps

Posted

技术标签:

【中文标题】无法在脚本中导入 django.apps【英文标题】:Can't import django.apps within script 【发布时间】:2016-07-08 16:41:14 【问题描述】:

我有测试脚本:

#!/usr/bin/env python
# coding: utf-8

import os, sys, subprocess, time, re
from django.conf import settings
from django.apps import apps
import django

django.setup()

"""
http://***.com/questions/24027901/dynamically-loading-django-apps-at-runtime
"""

MAIN_IMPORTS = """\
from django.test import TestCase
from model_mommy import mommy

"""

IMPORT_STATEMENT = """\
from clientsite.app.models import models
"""

TEST_BLOCK = """\
class modelnameCreationTests(TestCase):
    def setUp(self):
        self.model = modelname

    def test_create(self):
        x = mommy.make(self.model)
        x.save()
        self.assertTrue(x.pk)

    def test_factory_isinstance(self):
        x = mommy.make(self.model)
        self.assertTrue(isinstance(x, modelname))
"""

all_apps = apps.get_apps()
all_models = apps.get_models()
model_info = apps.all_models

我希望能够在我的脚本中使用django.apps。该脚本位于mysite/mommy_app/scripts/testtasm.py之类的应用程序中

我试过了

cchilders:~/work_projects/mysite [ckc/fixture-replacements]$ ./manage.py mysite/mommy_models/scripts/testtasm.py 
Unknown command: 'mysite/mommy_models/scripts/testtasm.py'

失败了。

django.setup() 也失败了。

如何在脚本中使用 django 功能而不实际运行 runserver?谢谢。

【问题讨论】:

你试过把它作为一个普通的python脚本运行吗? 【参考方案1】:

你不应该使用manage.py 来运行你的脚本,除非你已经创建了custom management command

您应该使用

运行脚本
python mysite/mommy_models/scripts/testtasm.py 

或者,如果脚本是可执行的

mysite/mommy_models/scripts/testtasm.py

在脚本中,在调用django.setup 之前,必须设置DJANGO_SETTINGS_MODULE 环境变量。您可能还需要将项目目录添加到 Python 路径。

import os
import sys
# This should be the directory that contains the directory containing settings.py
sys.path.add('/path/to/mysite') 
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")

django.setup()

# now you can import the settings and access them
from django.conf import settings

【讨论】:

以上是关于无法在脚本中导入 django.apps的主要内容,如果未能解决你的问题,请参考以下文章

尽管已安装,但无法在 .py 脚本中导入 plotly.express

ImportError:无法在 IPython 中导入名称“SparkContext”

VueJS 和 SASS - 在脚本中导入和使用 SASS 变量

在 Node 环境中导入 SQL 转储

我是否必须在powershell Runbook(azure)中导入模块?

无法在 Python 中导入位置设置为 PYTHONPATH 的模块