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/ в качестве корневой папки.
Я действительно перепробовал множество вариантов конфигурации, но всегда получаю:
и в журналах выполнения что-то вроде:
[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
, с которой вы столкнулись.