J'ai essayé tout ce que je pouvais trouver pour résoudre ce problème, et je commence à m'arracher les cheveux un peu… .. Je reçois cette erreur:
Django.core.exceptions.ImproperlyConfigured: Requested setting CACHES, but settings are not configured. You must either define the environment variable Django_SETTINGS_MODULE or call settings.configure() before accessing settings.
Mes scripts fonctionnent bien quand je le fais:
python3 ./manage.py runserver
Cependant, chaque fois que j'essaye d'exécuter des tests, j'obtiens l'erreur ci-dessus ........ J'utilise un VirtualEnv, qui n'hérite de manière globale, tout est installé (avec la version correcte) et, dans mon fichier manage.py,
os.environ.setdefault("Django_SETTINGS_MODULE", "<appname>.settings")
J'utilise PyCharm Proffesional pour le développement et j'ai essayé d'exécuter les tests à la fois dans l'IDE et dans le shell . Dans le shell que j'utilise:
python3 manage.py test
Le shell ne trouve aucun test. Le test est basique, et je ne me préoccupe pas vraiment de son contenu actuel, mais de mon environnement.UPDATE: J'ai résolu le problème avec le shell. Les tests doivent être définis par:
def test_<name>():
Cependant, cela n'a pas résolu mon problème avec PyCharm. J'ai aussi appelé:
settings.configure()
Ce qui m'a dit qu'il était déjà configuré.
Veuillez noter que je pas n’utilise aucune base de données avec Django, et j’ai commenté les éléments appropriés en dehors des paramètres.
L'erreur complète est:
Traceback (most recent call last):
File "/root/kiloenv/lib/python3.4/site-packages/Django/conf/__init__.py", line 38, in _setup
settings_module = os.environ[ENVIRONMENT_VARIABLE]
File "/usr/lib/python3.4/os.py", line 631, in __getitem__
raise KeyError(key) from None
KeyError: 'Django_SETTINGS_MODULE'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/<username>/Documents/<dirname>/<appname>/tests.py", line 1, in <module>
from Django.test.utils import setup_test_environment
File "/root/virtualenv/lib/python3.4/site-packages/Django/test/__init__.py", line 5, in <module>
from Django.test.client import Client, RequestFactory
File "/root/virtualenv/lib/python3.4/site-packages/Django/test/client.py", line 11, in <module>
from Django.contrib.auth import authenticate, login, logout, get_user_model
File "/root/virtualenv/lib/python3.4/site-packages/Django/contrib/auth/__init__.py", line 6, in <module>
from Django.middleware.csrf import rotate_token
File "/root/virtualenv/lib/python3.4/site-packages/Django/middleware/csrf.py", line 14, in <module>
from Django.utils.cache import patch_vary_headers
File "/root/virtualenv/lib/python3.4/site-packages/Django/utils/cache.py", line 26, in <module>
from Django.core.cache import get_cache
File "/root/virtualenv/lib/python3.4/site-packages/Django/core/cache/__init__.py", line 69, in <module>
if DEFAULT_CACHE_ALIAS not in settings.CACHES:
File "/root/virtualenv/lib/python3.4/site-packages/Django/conf/__init__.py", line 54, in __getattr__
self._setup(name)
File "/root/virtualenv/lib/python3.4/site-packages/Django/conf/__init__.py", line 47, in _setup
% (desc, ENVIRONMENT_VARIABLE))
Django.core.exceptions.ImproperlyConfigured: Requested setting CACHES, but settings are not configured. You must either define the environment variable Django_SETTINGS_MODULE or call settings.configure() before accessing settings.
J'ai exécuté PyCharm sous Sudo pour m'assurer que le problème n'était pas une autorisation, car je stockais env sous root.
EDIT: Je viens de découvrir que mes tests qui n’utilisent pas Django fonctionnent correctement, mais Pycharm continue de générer plusieurs échecs. Ces échecs ne sont pas les tests individuels, ils sont juste l'erreur que j'ai mentionnée ici (il y a 341 tests qui ne sont pas liés à Django). Je n'ai qu'un seul test qui utilise Django, qui ne dépassera pas l'initialisation et le rejet de l'erreur mentionnée.
J'espère que j'ai été explicatif
Si vous utilisez PyCharm Pro, vous pouvez soit tester votre application en effectuant une action "Lancer Django Console ...". Une fois que vous avez cliqué sur "tester", il vous demandera l'application que vous souhaitez tester.
ou
Créez un test Django dans la configuration Run/Debug.
Utilisez ceci
import os
os.environ['Django_SETTINGS_MODULE'] = 'mysite.settings'
au lieu de
os.environ.setdefault("Django_SETTINGS_MODULE", "<appname>.settings")
Dans votre script python, vous essayez d'accéder aux modèles Django avant de définir l'environnement, essayez-le dans cet ordre:
os.environ.setdefault("Django_SETTINGS_MODULE", "<appname>.`settings`")
from <appname>.models import Class1, Class2,...
depuis, je ne veux pas ajouter ceci dans chaque fichier, j'ai créé un fichier appelé usercustomize.py et ajouté ce contenu:
import os
os.environ['Django_SETTINGS_MODULE']='foosite.settings'
Le chemin du fichier dans mon cas:
src/foosite/usercustomize.py
J'ai installé foosite avec "pip install -e". Je ne suis pas sûr que cela fonctionne pour les installations normales.
J'ai eu cette erreur lorsque j'ai importé TestCase à partir de unittest2. Je l'ai corrigé en important TestCase par:
from Django.test import TestCase
Mes soupçons ont été soulevés lorsque le test a été étiqueté "Unittest" plutôt que "Test". Je devais exécuter toute la suite avant que Pycharm ne réalise que j'avais apporté ce changement ...