Runtime.ImportModuleError:无法导入模块“vc__handler__python”:没有名为“mysite”的模块

问题描述 投票:0回答:1

我最近观看了视频“使用 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/ 作为根文件夹。

我确实尝试了很多配置选项,但总是得到: 500_Internal_Invocation_Error

并且在运行时日志中类似:

[错误] 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.jsonbuild_files.shrequirements.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

python django runtime-error vercel importerror
1个回答
0
投票

以下是如何使用正确的格式回答 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.验证数据库连接:

确保您的数据库已正确设置和连接,因为如果配置不正确,这也可能导致运行时错误。

说明:

  • 模块导入错误:该错误通常发生在找不到模块或包时。通过正确配置
    vercel.json
    并确保您的环境设置为
    setup.sh
    ,您可以避免此错误。
  • 运行时配置:将运行时设置为Python 3.12并使用正确的构建命令可确保您的环境与预期设置一致。

这应该有助于解决您遇到的

Runtime.ImportModuleError

© www.soinside.com 2019 - 2024. All rights reserved.