web-dev-qa-db-fra.com

Pycharm avec Django lève ImportError: impossible d'importer le nom 'unittest'

Je travaille sur le didacticiel Django et j'essaie de faire en sorte que les scénarios de test fonctionnent avec pycharm. J'ai rencontré un problème cependant. Quand j'exécute la commande: test de l'application

je suis confronté à cette exception: le cadre de test s'est arrêté de manière inattendue

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

Apparemment, le fichier Django_test_manage.py ne fonctionne pas. Comment puis-je résoudre ce problème? Cela se produit même lorsque la classe test.py est vide. Il faut donc que pycharm pose un problème (?) J'utilise Pycharm Pro 2017.2.4, Django 2.0 et Python 3.6 Mes configurations d'exécution/de débogage ne sont que les paramètres Django prédéfinis de base que pycharm fait

je vous remercie!!

6
fogx

Le nouveau PyCharm a ce bug corrigé.

Si la mise à jour de PyCharm n'est pas une option, vous pouvez modifier les lignes suivantes sur Django_test_runner.py:

 if VERSION[1] >= 7:
   import unittest
 else:
   from Django.utils import unittest

à:

 if VERSION >= (1, 7):
   import unittest
 else:
   from Django.utils import unittest
5
thyago stall

Django.utils.unittest a été supprimé dans Django 1.9. Je suppose donc que vous utilisez peut-être une ancienne version du didacticiel.

Dans pycharm, utilisez-vous le Django.tests.testcases run config? Mieux vaut utiliser le unittest.TestCase de Python comme détaillé ici

edit: Donc dans Django_test_runner.py vous avez les éléments suivants:

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

Il semble donc que la version de Django que vous utilisez dans l'interpréteur pour votre test de configuration est <1.7 (lorsque Django.utils.unittest était obsolète.) Que renvoie-t-il si vous faites from Django import VERSION et l'imprimez dans votre interpréteur?

6
ptr

Je pense que c'est un bug dans Django_test_runner.py de Pycharm. 

Dans mon pycharm, le code est le suivant: 

  if VERSION[1] >= 7:
    import unittest
  else:
    from Django.utils import unittest

Mais vous (et moi) utilisez Django 2.0, donc pycharm import "de Django.utils import unittest" ... 

J'ai modifié mon test_runner comme ça: 

  if VERSION[0] > 1 or VERSION[1] >= 7:
    import unittest
  else:
    from Django.utils import unittest

Vous devez modifier le même fichier ailleurs, avec les mêmes astuces.

C'est du travail ! 

2
Mr Jmad

Il y a en fait plus de problèmes avec Django_test_runner.py. Ce qui a aidé a été de la remplacer par cette version: https://Gist.github.com/IlianIliev/6f884f237ab52d10aa0e22d53df97141

On peut le trouver dans <pycharm_root>/helpers/pycharm

1
Michal Holub