Runtime.ImportModuleError: Unable to import module 'vc__handler__python' if the root folder is set one level above the server folder on vercel

Недавно я посмотрел видео " Развертывание проекта Django на Vercel с помощью Supabase PostgreSQL: Step by Step Guide". Я следовал этому видео шаг за шагом, и мой проект действительно развернулся. Но он развернулся, если я выбрал папку python_server/ в качестве корневого каталога. Но мне нужно выбрать папку на один уровень выше в качестве корневого каталога. У меня такая структура проекта:

    Project/
    ├── python_server/
    │   ├── __init__.py
    │   ├── mysite/
    │   │   ├── __init__.py
    │   │   ├── settings.py
    │   │   ├── urls.py
    │   │   ├── wsgi.py
    │   ├── manage.py
    │   ├── gif_service/
    │   │   ├── templates
    │   │   ├── views.py
    │   │   ├── urls.py
    │   ├── static
    │   ├── staticfiles
    ├── public
    ├── views
    ├── js_server

Я скопировал свои статические файлы из /public и представления из /views в /python_server. И я выбрал /python_server в качестве корня папки. Это хорошо работает для Vercel. Но для меня это не очень хорошо. Потому что я использую представления из /views и статические файлы из /public для обоих серверов: Express и Django. И поэтому иметь копии статических и html-файлов - не лучшая практика. Поэтому мне нужно развернуть Vercel не с python_server/ в качестве корневой папки, а с Project/ в качестве корневой папки.

Я действительно перепробовал множество вариантов конфигурации, но всегда получаю: 500_Internal_Invocation_Error

и в журналах выполнения что-то вроде:

[ERROR] Runtime.ImportModuleError: Невозможно импортировать модуль 'vc__handler__python': No module named 'mysite' Traceback (most recent call last):INIT_REPORT Init Duration: 1798.90 ms Фаза: invoke Статус: error Error Type: Runtime.Unknown

или

[ERROR] Runtime.ImportModuleError: Невозможно импортировать модуль 'vc__handler__python': No module named 'django' Traceback (most recent call last):INIT_REPORT Init Duration: 1798.90 ms Фаза: invoke Статус: error Error Type: Runtime.Unknown

Мои build_files.sh и vercel.json в python_server/ выглядят так:

build_files.sh:

    #!/bin/bash
    
    pip install setuptools
    pip install -r requirements.txt
    
    python manage.py makemigrations
    python manage.py migrate
    python manage.py tailwind install
    python manage.py collectstatic
    python manage.py tailwind start

vercel.json:

    {
      "version": 2,
      "builds": [
        {
          "src": "mysite/wsgi.py",
          "use": "@vercel/python",
          "config": { "maxLambdaSize": "15mb",
          "runtime": "python3.10",
          "buildCommand": "bash build_files.sh"
         }  
        }
      ],
      "routes": [
        {
          "src": "/(.*)",
          "dest": "mysite/wsgi.py"
        },
        {
          "src": "/static/(.*)",
          "dest": "/static/$1"
        }
      ]
    }

requirements.txt:

    asgiref==3.8.1
    Django==5.1
    django-environ==0.11.2
    django-tailwind==3.8.0
    psycopg2-binary==2.9.9
    sqlparse==0.5.1
    typing_extensions==4.12.2
    tzdata==2024.1
    whitenoise==6.7.0

Я уже пытался переместить vercel.json, build_files.sh и requirements. txt в папку Project/ и измените "src": "mysite/wsgi.py" на "src": "python_server/mysite/wsgi.py" и "dest": "mysite/wsgi.py" на "dest": "python_server/mysite/wsgi.py" в vercel.json. Я попытался использовать build_files.sh следующим образом:

    #!/bin/bash
    
    pip install setuptools
    pip install -r requirements.txt
    
    python python_server/manage.py makemigrations
    python python_server/manage.py migrate
    python python_server/manage.py tailwind install
    python python_server/manage.py collectstatic
    python python_server/manage.py tailwind start

Но я получил ошибку.

Также я попытался изменить build_files.sh на следующее:

    #!/bin/bash
    cd /python_server
    pip install setuptools
    pip install -r requirements.txt

    python manage.py makemigrations
    python manage.py migrate
    python manage.py tailwind install
    python manage.py collectstatic
    python manage.py tailwind start

Я снова получил ошибку.

Я даже пытался изменить "buildCommand": "bash build_files.sh" на "buildCommand": "cd python_server && bash build_files.sh" или даже изменить build_files.sh на следующее:

    #!/bin/bash
    export PYTHONPATH=$(pwd)/python_server
    
    pip install setuptools
    pip install -r requirements.txt
    
    python manage.py makemigrations
    python manage.py migrate
    python manage.py tailwind install
    python manage.py collectstatic
    python manage.py tailwind start

Но я всегда получал одну и ту же ошибку:

[ERROR] Runtime.ImportModuleError: Невозможно импортировать модуль 'vc__handler__python': No module named 'mysite' Traceback (most recent call last):INIT_REPORT Init Duration: 1798.90 ms Фаза: invoke Статус: error Error Type: Runtime.Unknown

или

[ERROR] Runtime.ImportModuleError: Невозможно импортировать модуль 'vc__handler__python': No module named 'django' Traceback (most recent call last):INIT_REPORT Init Duration: 1798.90 ms Фаза: invoke Статус: error Error Type: Runtime.Unknown

Вот как вы можете ответить на вопрос на Stack Overflow с правильным форматированием:


Чтобы решить проблему [ERROR] Runtime.ImportModuleError: Unable to import module 'vc__handler__python': No module named 'mysite', вы можете выполнить следующие действия:

1. Переименуйте build_files.sh в setup.sh и обновите сценарий:

Переименуйте ваш build_files.sh в setup.sh и обновите его, включив необходимые команды:

#!/bin/bash
# Clear pip cache
pip cache purge

# Install dependencies
pip install setuptools
pip install -r requirements.txt

# Run Django management commands
python manage.py makemigrations
python manage.py migrate
python manage.py collectstatic --noinput

2. Обновление vercel.json:

В вашем vercel.json файле убедитесь, что вы установили время выполнения на Python 3.12, и используйте setup.sh скрипт в процессе сборки:

{
    "builds": [
        {
            "src": "DjangoEcommerce/wsgi.py",
            "use": "@vercel/python",
            "config": {
                "maxLambdaSize": "15mb",
                "runtime": "python3.12",
                "buildCommand": "bash setup.sh"
            }
        }
    ],
    "routes": [
        {
            "src": "/(.*)",
            "dest": "/DjangoEcommerce/wsgi.py"
        },
        {
            "src": "/static/(.*)",
            "dest": "/static/$1"
        }
    ]
}

3. Сделайте setup.sh исполняемым:

После обновления скрипта выполните следующую команду в терминале, чтобы сделать setup.sh исполняемым:

    chmod +x setup.sh

4. Проверка подключения к базе данных:

Убедитесь, что ваша база данных правильно настроена и подключена, так как при неправильной настройке это может привести к ошибкам во время выполнения программы.

Объяснение:

  • Module Import Error: Ошибка обычно возникает, когда модуль или пакет не может быть найден. Правильно настроив vercel.json и убедившись, что ваше окружение настроено с помощью setup.sh, вы можете избежать этой ошибки.
  • Конфигурация времени выполнения: Установка времени выполнения на Python 3.12 и использование правильной команды сборки гарантирует, что ваше окружение соответствует ожидаемым настройкам.

Это поможет решить проблему Runtime.ImportModuleError, с которой вы столкнулись.

Вернуться на верх