Django.setup() в единственном файле в папке 'apps', получено, что 'apps' не является пакетом

Попытался создать проекты в папке apps, получил ошибку -- 'apps' is not a package.

init project

django-admin startproject proj
cd proj
mkdir apps
cd apps
python ..\manage.py startapp foo

apps.py

from django.apps import AppConfig
class FooConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'apps.foo'

models.py

from django.db import models
class FileModel(models.Model):
    file = models.FileField(upload_to='static/uploads')

settings.py

...
INSTALLED_APPS = [
    ...,
    'apps.foo',
]

python ..\manage.py makemigrations

python ..\manage.py migrate

tests.py

import os,sys

pwd = os.path.dirname(os.path.relpath(__file__))
sys.path.append(pwd + "../../")
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')

import django
django.setup()

# SomeModel.objects.create(xxxx)

$ proj\apps\foo>python tests.py

Traceback (most recent call last):
  File "D:\temp\delweb2\proj\apps\foo\tests.py", line 8, in <module>
    django.setup()
  File "C:\Users\wgfabc\.pyenv\pyenv-win\versions\3.10.1\lib\site-packages\django\__init__.py", line 24, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "C:\Users\wgfabc\.pyenv\pyenv-win\versions\3.10.1\lib\site-packages\django\apps\registry.py", line 91, in populate
    app_config = AppConfig.create(entry)
  File "C:\Users\wgfabc\.pyenv\pyenv-win\versions\3.10.1\lib\site-packages\django\apps\config.py", line 223, in create
    import_module(entry)
  File "C:\Users\wgfabc\.pyenv\pyenv-win\versions\3.10.1\lib\importlib\__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1001, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'apps.foo'; 'apps' is not a package

вам нужно добавить абсолютный путь к sys.path, а также "/" будет отсутствовать в:

pwd = os.path.dirname(os.path.relpath(__file__))
sys.path.append(pwd + "../../")

Вышеприведенный код добавляет что-то вроде "your_dir_name../../"

вы можете изменить его на

sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
Вернуться на верх