【问题标题】:Django Testing - ImportError: Start directory is not importableDjango 测试 - ImportError:开始目录不可导入
【发布时间】:2025-11-27 03:10:01
【问题描述】:

我试图对一段代码进行一些测试,但我得到 ImportError: Start directory is not importable。下面是我的代码。如果有人可以提供帮助,我将不胜感激。我正在使用 Python 2.7.5 和 pycharm。

这是我在virenv中执行的命令

manage.py 测试 /project/tests.py

from django.test import TestCase

# Create your tests here.
from project.models import Projects
from signup.models import SignUp


class ProjectTestCase(TestCase):

    def SetUp(self):
        super(ProjectTestCase,self).SetUp()
        self.john = SignUp.objects.get(email='john@john.com')
        self.project = Projects.objects.get(pk=1)


    def test_project_permission(self):


        self.assertFalse(self.john.has_perm('delete',self.project))
        self.assertTrue(self.john.has_perm('view',self.project))
        self.assertTrue(self.john.has_perm('change',self.project))

【问题讨论】:

  • 不要使用绝对路径。你可以做./manage.py test project
  • 请在 Foon 的回答下查看我的回复。
  • setUp() 不是SetUp()
  • 仍然给我表格已经存在错误,正如我在 Foon 的回复中描述的那样。

标签: python django pycharm


【解决方案1】:
  1. 您应该确认您的项目目录中有__init__.py(它可以是一个空文件)
  2. 您没有正确调用测试。假设您有一个名为 project 的应用,那么在该应用中调用测试的方式是 manage.py test project

[编辑以获取真正进入单独问题领域的附加评论]

我建议将此添加到 settings.py(在底部)

import sys
if 'test' in sys.argv:
    DATABASES['default'] = {'ENGINE': 'django.db.backends.sqlite3'}
    SOUTH_TESTS_MIGRATE = False

这个:

A.将使用 sqlite(有点,我不确定它实际上是 sqlite 还是像 sqlite 一样工作的内存数据库)......如果我使用 postgres 并且试图让我的权限不要过于宽松,我已经注意到了问题而且我的测试中止了)

B.禁用南迁移(因此它将从一个针对当前所说的任何模型构建的干净数据库开始)

【讨论】:

  • 我的 init.py 是一个空文件。现在我做了什么 ./manage.py 测试项目(@karthikr:它适用于绝对路径和相对路径)现在我在创建测试数据库时遇到错误,其中一个表已经存在!我正在使用南方。
  • 如果我的建议不起作用,我建议粘贴您现在收到的错误消息
  • @Foon:谢谢。这就对了! SOUTH_TESTS_MIGRATE = False 我不必包含 DATABASES['default'] = {'ENGINE': 'django.db.backends.sqlite3'},因为测试引擎似乎使用内存数据库。