У меня есть Django проект со слегка нестандартной структурой (показан ниже), а тестовый прогон Django не работает.
root_dir
├ src
| ├ myapp_dir (apps.py, etc.)
| ├ project_files_dir (settings.py, wsgi.py, etc.)
| ├ utils_dir, etc.
| └ manage.py
├ tests
| ├ test_settings.py
| └ myapp_tests_dir (tests1.py, tests2.py, etc.)
├ setup.py
└ runtests.py
apps.py
содержит:
from django.apps import AppConfig
class MyAppConfig(AppConfig):
name = 'myapp'
settings.py
включает в себя INSTALLED_APPS = [..., myapp]
test_settings.py
включает в себя INSTALLED_APPS = [..., myapp, tests]
setup.py
содержит: из os.path имя_порта импорта, присоединение
from setuptools import find_packages, setup
root = dirname(__file__)
with open(join(root, "README.md")) as readme:
README = readme.read()
try:
with open(join(root, "VERSION")) as version_file:
version = version_file.read().strip()
except IOError:
version = "0.0.1"
setup(
name="myapp-name",
version=version,
packages=find_packages("src"),
package_dir={"": "src"},
include_package_data=True,
description="MyApp description",
long_description=README,
author="My Name",
author_email="my@email.com",
url="https://",
install_requires=["celery", "django", "requests"],
)
runtests.py
содержит:
import os
import sys
import django
from django.conf import settings
from django.test.utils import get_runner
if __name__ == "__main__":
os.environ['DJANGO_SETTINGS_MODULE'] = 'tests.test_settings'
django.setup()
TestRunner = get_runner(settings)
test_runner = TestRunner()
failures = test_runner.run_tests(["tests"])
sys.exit(bool(failures))
Когда я запускаю тесты с python runtests.py
, я получаю ModuleNotFoundError: No module named 'myapp'
Если попытаться изменить test_settings.py
, чтобы включить INSTALLED_APPS = [..., src.myapp, tests]
Затем я получаю django.core.exceptions.ImproperlyConfigured: Cannot import 'myapp'. Check that 'src.myapp.apps.MyAppConfig.name' is correct.
Вероятно, также стоит упомянуть, что runserver
отлично работает из рабочего каталога root_dir
при его вызове так:
> python src/manage.py runserver
Watching for file changes with StatReloader
Performing system checks...
System check identified no issues (0 silenced).
April 22, 2020 - 16:06:19
Django version 3.0.5, using settings 'project.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C