You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

服务器端使用pipenv执行Django迁移失败问题排查

问题分析:Pipenv部署Django项目时的Django导入错误

一、Capistrano迁移任务代码

task :migrate do 
  on roles(:app) do
    execute "cd #{release_path} && /home/ubuntu/.pyenv/shims/pipenv install"
    execute "cd #{release_path} && /home/ubuntu/.pyenv/shims/pipenv run python #{release_path}/manage.py makemigrations" 
    execute "cd #{release_path} && /home/ubuntu/.pyenv/shims/pipenv run python #{release_path}/manage.py migrate"
 end

二、Pipfile配置

[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[packages]
django = "*"
pandas = "*"
djangorestframework = "*"
markdown = "*"
django-filter = "*"
django-webpack-loader = "*"
django-crispy-forms = "*"
pymysql = "*"
beautifulsoup4 = "*"

[dev-packages]

[requires]
python_version = "3.9"

三、报错信息

DEBUG [42151ee5]    Installing dependencies from Pipfile.lock (4abb36)...
 DEBUG [42151ee5]   To activate this project's virtualenv, run pipenv shell.
Alternatively, run a command inside the virtualenv with pipenv run.
  INFO [42151ee5] Finished in 19.917 seconds with exit status 0 (successful).
  INFO [35fb8a90] Running cd /var/www/html/myappp/releases/20220923122448 && /home/ubuntu/.pyenv/shims/pipenv run python /var/www/html/myapp/releases/20220923122448/manage.py makemigrations as ubuntu@panda.example.jp
 DEBUG [35fb8a90] Command: cd /var/www/html/muapp/releases/20220923122448 && /home/ubuntu/.pyenv/shims/pipenv run python /var/www/html/myapp/releases/20220923122448/manage.py makemigrations
 DEBUG [35fb8a90]   Traceback (most recent call last):
  File "/home/ubuntu/.local/share/virtualenvs/20220923122448-VTt_Iizv/lib/python3.8/site-packages/django/utils/timezone.py", line 10, in <module>
    import zoneinfo
ModuleNotFoundError: No module named 'zoneinfo'

    raise ImportError(
ImportError: Couldn't import Django. Are you sure it's installed and available on your PYTHONPATH environment variable? Did you forget to activate a virtual environment?

问题根源

  1. Python版本不匹配:Pipfile指定使用Python3.9,但实际虚拟环境用的是Python3.8(从报错路径/lib/python3.8/site-packages/...可看出)。zoneinfo是Python3.9及以上版本自带的模块,3.8没有该模块,而Django 4.x+依赖这个模块,所以触发导入错误,最终导致提示“找不到Django”。
  2. Capistrano任务路径拼写错误:命令中出现myappp、muapp等错误路径,与实际的myapp路径不符,可能导致执行命令时找不到正确的项目文件。

解决步骤

  1. 确保服务器使用Python3.9创建虚拟环境
    在服务器的项目目录下执行:

    # 设置当前目录使用Python3.9(需先通过pyenv安装对应版本)
    pyenv local 3.9.x
    # 删除现有错误的虚拟环境
    pipenv --rm
    # 重新安装依赖,确保使用指定的Python版本
    pipenv install --deploy
    
  2. 修正Capistrano任务中的路径问题
    改用within方法自动切换到发布目录,避免手动拼接路径出错,同时简化命令:

    task :migrate do
      on roles(:app) do
        within release_path do
          execute "/home/ubuntu/.pyenv/shims/pipenv install --deploy"
          execute "/home/ubuntu/.pyenv/shims/pipenv run python manage.py makemigrations"
          execute "/home/ubuntu/.pyenv/shims/pipenv run python manage.py migrate"
        end
      end
    end
    
  3. 可选:锁定Django版本
    Pipfile中django = "*"会安装最新版Django,若服务器Python版本无法兼容,建议指定兼容3.9的具体版本,比如:

    django = "~=4.2"
    

内容的提问来源于stack exchange,提问作者whitebear

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 17:01:26