私はこの問題を解決するために見つけることができるすべてを試してみましたが、少し髪を引き裂き始めています。私はこのエラーを受け取っています:
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.
私のスクリプトは私がそうするときうまく動きます:
python3 ./manage.py runserver
ただし、テストを実行しようとすると、上記のエラーが発生します...グローバルに何も継承しないVirtualEnvを使用し、すべてが(正しいバージョンで)インストールされ、私のmanage.py内に設定しました:
os.environ.setdefault("Django_SETTINGS_MODULE", "<appname>.settings")
私はPyCharm Proffesionalを使用して開発しており、IDEとシェルの両方でテストを実行しようとしました。私が使用しているシェル内:
python3 manage.py test
シェルはテストを見つけていません。このテストは基本的なものであり、私が苦労している環境であるため、私は現在、その内容について本当に心配しているわけではありません。 [〜#〜] update [〜#〜]:シェルの問題を解決しました。テストは次によって定義されなければなりません:
def test_<name>():
しかし、これはPyCharmの私の問題を解決していません。私も呼ばれています:
settings.configure()
それは既に設定されていることを教えてくれました。
私はnotであり、Djangoで任意のデータベースを使用していることに注意してください。設定から適切なことをコメントしました。
完全なエラーは次のとおりです。
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.
Sudoの下でPyCharmを実行し、ルートの下にenvを保存しているときに問題が許可ではなかったことを確認しました。
[〜#〜] edit [〜#〜]:Djangoを使用しないテストが正常に実行されているが、Pycharmはまだスローしていることを発見しましたこれらの失敗は個々のテストではなく、ここで言及したエラーにすぎません(Django関連しない)341個のテストがあります。 Djangoを使用します。これは、前述のエラーを初期化してスローすることはありません。
私が説明してきたことを願っています
PyCharm Proを使用している場合は、アクション「Run Django Console ...」でアプリをテストできます。「test」をクリックすると、アプリの入力を求められますテスト。
または
実行/デバッグ構成でDjangoテストを作成します。
これを使って
import os
os.environ['Django_SETTINGS_MODULE'] = 'mysite.settings'
の代わりに
os.environ.setdefault("Django_SETTINGS_MODULE", "<appname>.settings")
pythonスクリプトで、環境を設定する前にDjangoモデルにアクセスしようとしています:
os.environ.setdefault("Django_SETTINGS_MODULE", "<appname>.`settings`")
from <appname>.models import Class1, Class2,...
すべてのファイルにこれを追加したくないので、usercustomize.pyというファイルを作成し、このコンテンツを追加しました。
import os
os.environ['Django_SETTINGS_MODULE']='foosite.settings'
私の場合のファイルパス:
src/foosite/usercustomize.py
「pip install -e」でfoositeをインストールしました。これが通常のインストールで機能するかどうかはわかりません。
私の場合、私は使用する必要がありました
python3 manage.py check --deploy
の代わりに
Django-admin check --deploy
Unittest2からTestCaseをインポートすると、このエラーが発生しました。 TestCaseをインポートして修正しました:
from Django.test import TestCase
テストに「Test」ではなく「Unittest」というラベルが付けられたときに、私の疑念が生じました。 Pycharmがこの変更を行ったことに気付く前に、スイート全体を実行する必要がありました...