【问题标题】:South: Unknown command 'migrate'南:未知命令“迁移”
【发布时间】:2012-09-02 23:39:36
【问题描述】:

我心狠手辣

$ python manage.py migrate
Unknown command: 'migrate'
Type 'manage.py help' for usage.

我将代码从 github 提取到新计算机上。此代码经过测试,正在其他计算机上运行。整个代码运行良好,除了我无法运行迁移!

安装我的虚拟环境并运行pip install -r requirements.txt。它安装了所有东西,包括南方。我可以通过运行来检查

$ python manage.py shell
>>> import south
>>> south.__version__
'0.7.3'

但是,当我运行 manage.py help 时,migrateschemamigration 命令不会出现在列表中。

我仔细检查了我的settings.py 文件是否在INSTALLED_APPS 下列出了“南”(拉动后我没有更改此文件)。

我尝试了pip uninstall south,然后再次运行pip install -r requirements.txt,但仍然出现同样的错误。

非常感谢任何帮助!

【问题讨论】:

  • 请仔细检查您的INSTALLED_APPS
  • 我做了,“南”列在INSTALLED_APPS

标签: python django migration pip django-south


【解决方案1】:

这主要是由于我们都通过 pip 安装了最后一个稳定版本(1.6)时遵循 1.7(DEV 版本)教程造成的。

按照1.6 tutorial 或按照说明安装 Django 1.7 开发版。

【讨论】:

    【解决方案2】:

    对于 Django 管理命令来说,成功导入包是不够的。 Python 可以很容易地从一个压缩的鸡蛋中导入一个包,但 Django 需要一个普通的未压缩文件。

    最初可以简化您的问题的建议:

    1. 管理命令必须以文件形式存在于普通目录path..to..south/management/commands(未压缩)中。
    2. 尝试手动查找并删除 south 的旧安装。 一个常见的问题是,某个软件包的一个版本已通过 easy_install(压缩)或通过“python setup.py install”手动安装,但 pip 没有卸载它并第二次安装它。
    3. 在 python 路径中仅使用绝对目录。如果可能,请不要在环境中或通过自定义的 manage 或 settings.py 更改安装程序和运行 Django 之间的 python 路径。一些 manage.py 或 settings.py 使用的 python 路径与包安装程序使用的路径不同,例如添加 ”。”或“..”在其他目录之前。您的项目中不应在 ... 中有其他 south 目录。

    建议 1 是 Django 的绝对要求。即使我使用多个版本以某种方式使用多个版本的 Python、Django 等测试我的应用程序,其他两个也很有帮助。

    主要需求调查示例:

    $ python manage.py shell
    >>> import os
    >>> import south.management.commands.migrate
    >>> assert os.path.isfile(south.management.commands.migrate.__file__)
    

    【讨论】:

    • hynekcer,根据你的建议,我收到了import south.management.commands.migrate >>> ImportError: No module named migrate
    • 完美!它已经弄清楚并且正在工作。我在. 中有一个名为“south”的文件夹。以前,我们在那里存储 South 的东西,但后来我们决定使用 pip。我们删除了该文件夹,但不知何故,删除必须没有被版本化。谢谢!
    • 断言成功,但我还是不能迁移
    • @OlegTikhonov:经过这么长时间,别人的新问题可能会更好。原始问题与消息“未知命令:'迁移'”有关,更多上下文与答案相关。显然,您的问题与问题中的问题不完全相同,因为您的测试结果相反。如果你看到同样的错误信息,那就很奇怪了,但是你可以立即通过测试示例,除了“shell”“migrate”之外没有任何改变。想想吧。
    • 是的,我知道,我只是不想问愚蠢的问题,反正我只是使用了 manage.y,现在一切正常。你的详细解释为我投了赞成票
    【解决方案3】:

    我通过前往http://south.readthedocs.org/en/latest/installation.html 并使用easy_install south 解决了这个问题。然后,我在我的 INSTALLED_APPS 中添加了“south”,它起作用了。

    【讨论】:

      【解决方案4】:

      我遇到了同样的错误,但原因不同。我做到了:

      $ python manage.py migrate my_app --settings=settings_dev.py
      

      但是使用设置参数,您应该传递模块的名称而不是文件的名称。所以应该是的

      $ python manage.py migrate my_app --settings=settings_dev
      

      当您像这样运行 validate 命令时,您会收到一条不错的错误消息,但是当您运行南命令时,它会说该命令是未知的:/

      【讨论】:

        【解决方案5】:

        就我而言。 south 已经安装,但后来需要其他库:

        pip install -r requirements.txt
        

        我不知道为什么 manage.py 没有抱怨他们。

        【讨论】:

          【解决方案6】:

          我有这个,但结果是我的settings.py 中有一个错误,当我尝试runserver 时出现了这个错误。修复了错误,命令又回来了。基本上没有任何应用程序的管理命令在那里,所以我的INSTALLED_APPS 肯定已经被覆盖或从未被写入。就我而言,设置文件的导入失败了。

          【讨论】:

            猜你喜欢
            • 2012-10-02
            • 1970-01-01
            • 2021-03-21
            • 1970-01-01
            • 1970-01-01
            • 2011-04-03
            • 1970-01-01
            • 2013-02-02
            相关资源
            最近更新 更多