pythondjangodeployment

Deployment error. Error running WSGI application. ModuleNotFoundError: No module named 'api.urls'


I deployed my django project to pythonanywhere, but when I enter the page, this error is displayed in the logs: Error running WSGI application ModuleNotFoundError: No module named 'api.urls'

Structure:
/home/danialsk/unitree/       # Main project directory
    unitree/                   # Main project's Python package
        settings.py            # Django settings file
        urls.py                # Main project's URL configuration file
        ...
    api/                       # 'api' app directory
        urls.py                # URLs for the 'api' app
        ...
    features/
        urls.py                # URLs for the 'features' app
        ...
pip list:
(env) 13:42 ~/unitree/unitree (master)$ pip list
Package             Version
------------------- --------
api                 0.0.7
asgiref             3.6.0
blinker             1.6.2
certifi             2023.5.7
charset-normalizer  3.1.0
click               8.1.3
colorama            0.4.6
Django              4.2.1
django-ckeditor     6.5.1
django-embed-video  1.4.8
django-filter       23.2
django-js-asset     2.0.0
djangorestframework 3.14.0
Flask               2.3.2
gunicorn            20.1.0
idna                3.4
itsdangerous        2.1.2
Jinja2              3.1.2
Markdown            3.4.3
MarkupSafe          2.1.2
nose                1.3.7
Pillow              9.5.0
pip                 22.1.2
psycopg2            2.9.6
pytz                2023.3
requests            2.30.0
setuptools          62.6.0
sqlparse            0.4.4
tzdata              2023.3
urllib3             2.0.2
Werkzeug            2.3.4
wheel               0.37.1
whitenoise          6.4.0

WSGI file:

import os
import sys

# assuming your django settings file is at '/home/danialsk/mysite/mysite/settings.py'
# and your manage.py is is at '/home/danialsk/mysite/manage.py'
path = '/home/danialsk/unitree/unitree'

if path not in sys.path:
    sys.path.append(path)

os.environ['DJANGO_SETTINGS_MODULE'] = 'unitree.settings'

# then:
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

Main urls:

from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('features.urls')),
]


urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_URL)
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

Feautures urls:

from django.urls import path, include
from . import views

urlpatterns = [
    path('', views.home, name='home'),
    path('api/', include('api.urls')),
]

Settings.py:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    'features.apps.FeaturesConfig',
    'api',
    'embed_video',
    'ckeditor',
    'ckeditor_uploader',
    'rest_framework',
]

It returns this error: Error running WSGI application ModuleNotFoundError: No module named 'api.urls'

Full error line:

Error running WSGI application
2023-05-21 14:41:34,122: ModuleNotFoundError: No module named 'api.urls'
2023-05-21 14:41:34,122:   File "/home/danialsk/.virtualenvs/env/lib/python3.10/site-packages/django/core/handlers/wsgi.py", line 124, in __call__
2023-05-21 14:41:34,122:     response = self.get_response(request)
2023-05-21 14:41:34,122: 
2023-05-21 14:41:34,122:   File "/home/danialsk/.virtualenvs/env/lib/python3.10/site-packages/django/core/handlers/base.py", line 140, in get_response
2023-05-21 14:41:34,122:     response = self._middleware_chain(request)
2023-05-21 14:41:34,122: 
2023-05-21 14:41:34,122:   File "/home/danialsk/.virtualenvs/env/lib/python3.10/site-packages/django/core/handlers/exception.py", line 57, in inner
2023-05-21 14:41:34,123:     response = response_for_exception(request, exc)
2023-05-21 14:41:34,123: 
2023-05-21 14:41:34,123:   File "/home/danialsk/.virtualenvs/env/lib/python3.10/site-packages/django/core/handlers/exception.py", line 140, in response_for_exception
2023-05-21 14:41:34,123:     response = handle_uncaught_exception(
2023-05-21 14:41:34,123: 
2023-05-21 14:41:34,123:   File "/home/danialsk/.virtualenvs/env/lib/python3.10/site-packages/django/core/handlers/exception.py", line 181, in handle_uncaught_exception
2023-05-21 14:41:34,123:     return debug.technical_500_response(request, *exc_info)
2023-05-21 14:41:34,123: 
2023-05-21 14:41:34,123:   File "/home/danialsk/.virtualenvs/env/lib/python3.10/site-packages/django/views/debug.py", line 67, in technical_500_response
2023-05-21 14:41:34,123:     html = reporter.get_traceback_html()
2023-05-21 14:41:34,123: 
2023-05-21 14:41:34,124:   File "/home/danialsk/.virtualenvs/env/lib/python3.10/site-packages/django/views/debug.py", line 410, in get_traceback_html
2023-05-21 14:41:34,124:     c = Context(self.get_traceback_data(), use_l10n=False)
2023-05-21 14:41:34,124: 
2023-05-21 14:41:34,124:   File "/home/danialsk/.virtualenvs/env/lib/python3.10/site-packages/django/views/debug.py", line 393, in get_traceback_data
2023-05-21 14:41:34,124:     c["raising_view_name"] = get_caller(self.request)
2023-05-21 14:41:34,124: 
2023-05-21 14:41:34,124:   File "/home/danialsk/.virtualenvs/env/lib/python3.10/site-packages/django/views/debug.py", line 100, in get_caller
2023-05-21 14:41:34,124:     resolver_match = resolve(request.path)
2023-05-21 14:41:34,124: 
2023-05-21 14:41:34,124:   File "/home/danialsk/.virtualenvs/env/lib/python3.10/site-packages/django/urls/base.py", line 24, in resolve
2023-05-21 14:41:34,125:     return get_resolver(urlconf).resolve(path)
2023-05-21 14:41:34,125: 
2023-05-21 14:41:34,125:   File "/home/danialsk/.virtualenvs/env/lib/python3.10/site-packages/django/urls/resolvers.py", line 663, in resolve
2023-05-21 14:41:34,125:     for pattern in self.url_patterns:
2023-05-21 14:41:34,125: 
2023-05-21 14:41:34,125:   File "/home/danialsk/.virtualenvs/env/lib/python3.10/site-packages/django/utils/functional.py", line 57, in __get__
2023-05-21 14:41:34,125:     res = instance.__dict__[self.name] = self.func(instance)
2023-05-21 14:41:34,125: 
2023-05-21 14:41:34,125:   File "/home/danialsk/.virtualenvs/env/lib/python3.10/site-packages/django/urls/resolvers.py", line 715, in url_patterns
2023-05-21 14:41:34,125:     patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
2023-05-21 14:41:34,126: 
2023-05-21 14:41:34,126:   File "/home/danialsk/.virtualenvs/env/lib/python3.10/site-packages/django/utils/functional.py", line 57, in __get__
2023-05-21 14:41:34,126:     res = instance.__dict__[self.name] = self.func(instance)
2023-05-21 14:41:34,126: 
2023-05-21 14:41:34,126:   File "/home/danialsk/.virtualenvs/env/lib/python3.10/site-packages/django/urls/resolvers.py", line 708, in urlconf_module
2023-05-21 14:41:34,126:     return import_module(self.urlconf_name)
2023-05-21 14:41:34,126: 
2023-05-21 14:41:34,126:   File "/home/danialsk/unitree/unitree/unitree/urls.py", line 9, in <module>
2023-05-21 14:41:34,126:     path('', include('features.urls')),
2023-05-21 14:41:34,126: 
2023-05-21 14:41:34,126:   File "/home/danialsk/.virtualenvs/env/lib/python3.10/site-packages/django/urls/conf.py", line 38, in include
2023-05-21 14:41:34,126:     urlconf_module = import_module(urlconf_module)
2023-05-21 14:41:34,126: 
2023-05-21 14:41:34,127:   File "/home/danialsk/unitree/unitree/features/urls.py", line 12, in <module>
2023-05-21 14:41:34,127:     path('api/', include('api.urls')),
2023-05-21 14:41:34,127: 
2023-05-21 14:41:34,127:   File "/home/danialsk/.virtualenvs/env/lib/python3.10/site-packages/django/urls/conf.py", line 38, in include
2023-05-21 14:41:34,127:     urlconf_module = import_module(urlconf_module)

How to fix that?


Solution

  • You've to set path to root directory (where manage.py lies) so change your path in wsgi file from this

    path = '/home/danialsk/unitree/unitree'
    

    to this

    path = '/home/danialsk/unitree'
    

    and you've duplicate urlpattern in your unitree.urls update it like this

    from django.contrib import admin
    from django.urls import path, include
    from django.conf import settings
    from django.conf.urls.static import static
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('', include('features.urls')),
    ]
    
    
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_URL)