繁体   English   中英

Django ImportError:仅在运行manage.py test时无法导入名称“设置”

[英]Django ImportError: cannot import name 'settings' only when running manage.py test

我是Django的新手,最近继承了一个项目,该项目有两个主要应用程序( my_appmy_soc_app ),并且具有类似于文章结尾处所示的目录结构。

我正在尝试运行项目的测试,当我运行python manage.py test ,主应用程序my_app下的测试都运行良好,但是当它尝试在my_soc_app run下运行测试时,尝试from my_soc_app import settings ,错误如下所示。

我无法弄清楚为什么只有在尝试运行测试时才抱怨该导入。

my_app / my_soc_app / my_soc_app / soc_app1 / tests / test_soc_app1.py中的导入为:

import asyncio
from unittest import TestCase, mock
from uuid import uuid4

import aioredis
import asyncpg
from aiohttp.test_utils import setup_test_loop, unittest_run_loop

from my_soc_app import settings
from my_soc_app.auth.user import User
from my_soc_app.services import Tracking

错误输出

当我运行python manage.py test my_soc_app时遇到的错误是:

$ python manage.py test my_soc_app
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
E
======================================================================
ERROR: my_soc_app.my_soc_app.soc_app1.tests.test_soc_app1 (unittest.loader._FailedTest)
----------------------------------------------------------------------
ImportError: Failed to import test module: my_soc_app.my_soc_app.soc_app1.tests.test_soc_app1
Traceback (most recent call last):
  File "/usr/lib/python3.6/unittest/loader.py", line 428, in _find_test_path
    module = self._get_module_from_name(name)
  File "/usr/lib/python3.6/unittest/loader.py", line 369, in _get_module_from_name
    __import__(name)
  File "/<...absolute.path...>/my_app/my_soc_app/my_soc_app/soc_app1/tests/test_soc_app1.py", line 9, in <module>
    from my_soc_app import settings
ImportError: cannot import name 'settings'


----------------------------------------------------------------------

背景

my_app是项目的基本应用程序,并且在其下有几个子应用程序。 这是定义和实现主要逻辑和api(帐户,服务等)的地方

my_soc_app是在单独的容器中运行的Web套接字服务。 其主要目的是从应用程序的移动客户端接收高频更新,并将事件发布到套接字侦听器(主要是Web门户/前端)。

我这样运行my_app

python manage.py runserver

并像这样测试它:

python manage.py test my_app

我这样运行'my_soc_app`:

cd my_soc_app && python run.py

并期望应该像这样测试:

python manage.py test my_soc_app

./manage.py的内容是:

#!/usr/bin/env python
import os
import sys

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "my_app.settings")
    try:
        from django.core.management import execute_from_command_line
    except ImportError:
        # The above import may fail for some other reason. Ensure that the
        # issue is really that Django is missing to avoid masking other
        # exceptions on Python 2.
        try:
            import django  # noqa
        except ImportError:
            raise ImportError(
                "Couldn't import Django. Are you sure it's installed and "
                "available on your PYTHONPATH environment variable? Did you "
                "forget to activate a virtual environment?"
            )
        raise
    execute_from_command_line(sys.argv)

./my_soc_app/run.py的内容是:

from aiohttp import web

from my_soc_app import settings
from my_soc_app.app import get_app

if __name__ == "__main__":
    application = get_app()
    web.run_app(
        application,
        host=settings.BIND_HOST,
        port=settings.BIND_PORT,
    )

目录结构

该项目的目录结构如下。

project/
  manage.py

  my_app/
    __init__.py

    settings/
      __init__.py
      my_app.py

    apps/
      __init__.py

      app1/
        __init__.py

        tests/
          __init__.py
          test_app1.py

  my_soc_app/
    __init__.py
    run.py

    my_soc_app/
      __init__.py

        settings/
          __init__.py
          my_soc_app.py

        soc_app1/
          __init__.py
          app.py
          views.py

          tests/
            __init__.py
            test_soc_app1.py

您应该使用from django.conf import settings

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM