我最近观看了视频“使用 Supabase PostgreSQL 在 Vercel 上部署 Django 项目:分步指南”。我按照这个视频一步步操作,我的项目真的部署成功了。但如果我选择文件夹 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/ 作为根文件夹。
并且在运行时日志中类似:
[错误] Runtime.ImportModuleError:无法导入模块“vc__handler__python”:没有名为“mysite”的模块 回溯(最近一次调用最后):INIT_REPORT 初始化持续时间:1798.90 ms 阶段:调用状态:错误错误类型:Runtime.Unknown
或
[错误] Runtime.ImportModuleError:无法导入模块“vc__handler__python”:没有名为“django”的模块 回溯(最近一次调用最后):INIT_REPORT 初始化持续时间:1798.90 ms 阶段:调用状态:错误错误类型:Runtime.Unknown
我的python_server/中的build_files.sh和vercel.json是这样的:
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"
}
]
}
需求.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"
更改为 vercel 中的
"dest": "python_server/mysite/wsgi.py"
。 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
但我总是遇到同样的错误:
[错误] Runtime.ImportModuleError:无法导入模块“vc__handler__python”:没有名为“mysite”的模块 回溯(最近一次调用最后):INIT_REPORT 初始化持续时间:1798.90 ms 阶段:调用状态:错误错误类型:Runtime.Unknown
或
[错误] Runtime.ImportModuleError:无法导入模块“vc__handler__python”:没有名为“django”的模块 回溯(最近一次调用最后):INIT_REPORT 初始化持续时间:1798.90 ms 阶段:调用状态:错误错误类型:Runtime.Unknown
以下是如何使用正确的格式回答 Stack Overflow 上的问题:
要解决问题
[ERROR] Runtime.ImportModuleError: Unable to import module 'vc__handler__python': No module named 'mysite'
,您可以按照以下步骤操作:
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
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"
}
]
}
setup.sh
可执行:更新脚本后,在终端中运行以下命令以使
setup.sh
可执行:
chmod +x setup.sh
确保您的数据库已正确设置和连接,因为如果配置不正确,这也可能导致运行时错误。
vercel.json
并确保您的环境设置为 setup.sh
,您可以避免此错误。这应该有助于解决您遇到的
Runtime.ImportModuleError
。