带有django的Pycharm抛出ImportError:无法导入名称'unittest'

fog*_*ogx 7 django django-testing pycharm

我正在通过django教程,我正在尝试使用pycharm运行测试用例.但是我遇到了一个问题.当我运行命令:app test

我面临这个例外:测试框架意外退出:

F:\programming\Python\python.exe "F:\programming\JetBrains\PyCharm 2017.2.4\helpers\pycharm\django_test_manage.py" test a F:\programming\Projects\pycharm\untitled
Testing started at 4:54 PM ...
Traceback (most recent call last):
  File "F:\programming\JetBrains\PyCharm 2017.2.4\helpers\pycharm\django_test_manage.py", line 157, in <module>
    utility.execute()
  File "F:\programming\JetBrains\PyCharm 2017.2.4\helpers\pycharm\django_test_manage.py", line 110, in execute
    from django_test_runner import is_nosetest
  File "F:\programming\JetBrains\PyCharm 2017.2.4\helpers\pycharm\django_test_runner.py", line 42, in <module>
    from django.utils import unittest
ImportError: cannot import name 'unittest'

Process finished with exit code 1
Run Code Online (Sandbox Code Playgroud)

显然,django_test_manage.py文件不起作用.我怎样才能解决这个问题?即使test.py类为空,也会发生这种情况.所以它一定是pycharm的问题然后(?)我正在使用Pycharm Pro 2017.2.4,Django 2.0和Python 3.6我的运行/调试配置只是pycharm所做的基本的预设Django设置

谢谢!!

ptr*_*ptr 6

django.utils.unittest 在Django 1.9中删除了所以我怀疑你可能正在使用旧版本的教程.

在pycharm中你使用的是django.tests.testcases运行配置吗?最好使用Python unittest.TestCase,详见此处

编辑:所以在django_test_runner.py中你有以下内容:

from django.test.testcases import TestCase
from django import VERSION

# See: https://docs.djangoproject.com/en/1.8/releases/1.7/#django-utils-unittest
# django.utils.unittest provided uniform access to the unittest2 library on all Python versions.
# Since unittest2 became the standard library's unittest module in Python 2.7,
# and Django 1.7 drops support for older Python versions, this module isn't useful anymore.
# It has been deprecated. Use unittest instead.
if VERSION >= (1,7):
  import unittest
else:
  from django.utils import unittest
Run Code Online (Sandbox Code Playgroud)

因此,您在测试运行配置的解释器中使用的django版本似乎<1.7(django.utils.unittest不推荐使用时).如果您from django import VERSION在解释器中执行并打印它,会返回什么?


thy*_*all 6

新的PyCharm修复了这个bug.

如果更新PyCharm不是一个选项,您可以更改以下行django_test_runner.py:

 if VERSION[1] >= 7:
   import unittest
 else:
   from django.utils import unittest
Run Code Online (Sandbox Code Playgroud)

至:

 if VERSION >= (1, 7):
   import unittest
 else:
   from django.utils import unittest
Run Code Online (Sandbox Code Playgroud)

  • 同样在文件中有`if VERSION [1]> = 6:`应该替换为`if VERSION> =(1,6):`,和`if VERSION [1]> = 1:`应该被替换用`if VERSION> =(1,1):`,一切都像魅力一样. (4认同)