2017-04-20 37 views
4

我正在升級我的Django應用程序,從Django 1.5.5到1.9,Django-cms從2.4.3到3.3(以及所有相應的包)。更新Django - 錯誤:'沒有模塊命名遷移'

後,我已經通過貶值的功能我現在上的錯誤絆倒,我無法理解所有的錯誤犁:「無模塊名爲遷移」

(在virtualenv中)運行時,我得到這個錯誤: - 蟒蛇manage.py runserver命令 還當我運行 - 蟒蛇manage.py遷移

Traceback (most recent call last): 
    File "manage.py", line 20, in <module> 
    execute_from_command_line(sys.argv) 
    File "/var/www/env/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 350, in execute_from_command_line 
    utility.execute() 
    File "/var/www/env/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 342, in execute 
    self.fetch_command(subcommand).run_from_argv(self.argv) 
    File "/var/www/env/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 195, in fetch_command 
    klass = load_command_class(app_name, subcommand) 
    File "/var/www/env/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 39, in load_command_class 
    module = import_module('%s.management.commands.%s' % (app_name, name)) 
    File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module 
    __import__(name) 
    File "/var/www/env/local/lib/python2.7/site-packages/django/core/management/commands/migrate.py", line 16, in <module> 
    from django.db.migrations.autodetector import MigrationAutodetector 
    File "/var/www/env/local/lib/python2.7/site-packages/django/db/migrations/__init__.py", line 1, in <module> 
    from .migration import Migration, swappable_dependency # NOQA 
ImportError: No module named migration 

manage.py

#!/usr/bin/env python2 
import os 
import sys 

if __name__ == "__main__": 

    settings_module_path = 'ais.settings.production' 
    ########## Attempt to override settings using local settings 
    try: 
     from ais.settings.local_settings import * 
     # For developmentent, file will probably hold the following: 
     settings_module_path = 'ais.settings.development' 
     print "!!!manage.py settings overwritten!!!" 
    except ImportError: 
     pass 
    os.environ['DJANGO_SETTINGS_MODULE'] = settings_module_path 

    from django.core.management import execute_from_command_line 

    execute_from_command_line(sys.argv) 

migrate.sh

#!/bin/sh 
echo "Starting ..." 

echo ">> Deleting old migrations" 
find . -path "*/migrations/*.py" -not -name "__init__.py" -delete 
find . -path "*/migrations/*.pyc" -delete 


# Optional 
echo ">> Deleting sqlite (if exists) database" 
find . -name "db.sqlite3" -delete 

echo ">> Running manage.py makemigrations" 
python manage.py makemigrations 

echo ">> Running manage.py migrate" 
python manage.py migrate 

echo ">> Done" 
+0

你會嘗試卸載,然後在你的virtualenv重新安裝Django? 'pip卸載django && pip install django == 1.11'(或者你正在升級到的任何版本)。 – YPCrumble

+0

我做到了....但仍然是相同的錯誤 –

+0

請確保您使用的是正確版本的Django。輸入'python -c「import django; print(django.get_version())」'到控制檯。這是什麼產生的?然後用激活的virtualenvironment('python --version')檢查你的Python版本。什麼版本?最後一件事是,當你升級Django時,你可能並沒有升級'manage.py' - 確保'#!/ usr/bin/env python'是該文件的第一行。 – YPCrumble

回答

3

你的腳本似乎是這個問題。它試圖刪除你的遷移,但它實際上也刪除了Django的/django/db/migrations/文件的內容。請注意,它明確不會刪除__init__.py文件,但會刪除其他文件。

一個選項就是刪除這些行:

echo ">> Deleting old migrations" 
find . -path "*/migrations/*.py" -not -name "__init__.py" -delete 
find . -path "*/migrations/*.pyc" -delete 

你不應該刪除無論如何,一旦你在生產環境中運行Django的老移民,因爲你可能要自定義代碼添加到遷移。這看起來像是一個便於開發的腳本。

相關問題