【问题标题】:TypeError: 'module' object is not subscriptable after upgrade to django 1.5.1TypeError:升级到 django 1.5.1 后,“模块”对象不可下标
【发布时间】:2013-07-22 13:06:55
【问题描述】:

从 django 1.2.7 升级到 1.5.1 后 尝试使用

运行 celery 时
python manage.py celeryd -v 2 -l INFO --settings=settings

我有一个错误提示

django.core.management.execute_manager

在 django 1.4 中已弃用

我的manage.py

#!/usr/bin/env python
from django.core.management import execute_manager
try:
    import settings # Assumed to be in the same directory.
except ImportError:
    import sys
    sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n(If the file settings.py does indeed exist, it's causing an ImportError somehow.)\n" % __file__)
    sys.exit(1)

if __name__ == "__main__":
    execute_from_command_line(settings)

我查看了 django 1.4 发行说明

django-core-management-execute-manager

正如上面所说,我用 execute_from_command_line 替换了 execute_manager

现在我在重新启动服务器时开始收到此错误消息

Traceback (most recent call last):
  File "C:\my\manage.py", line 12, in <module>
    execute_from_command_line(settings)
  File "C:\Python27\lib\site-packages\django\core\management\__init__.py", line 452, in     execute_from_command_line
    utility = ManagementUtility(argv)
  File "C:\Python27\lib\site-packages\django\core\management\__init__.py", line 226, in __init__
    self.prog_name = os.path.basename(self.argv[0])
TypeError: 'module' object is not subscriptable

【问题讨论】:

    标签: python django django-manage.py


    【解决方案1】:

    您将错误的参数传递给 execute_from_command_line 方法。您应该执行以下操作:

    #!/usr/bin/env python
    import os
    import sys
    
    if __name__ == "__main__":
        os.environ.setdefault("DJANGO_SETTINGS_MODULE", "<package>.<subpackage>.settings") #path to the settings py file
        from django.core.management import execute_from_command_line
        execute_from_command_line(sys.argv)
    

    #!/usr/bin/env python
    import os
    
    if __name__ == "__main__":
        os.environ.setdefault("DJANGO_SETTINGS_MODULE", "<package>.<subpackage>.settings") #path to the settings py file
        from django.core.management import execute_from_command_line
        execute_from_command_line() # by default sys.argv argument is taken
    

    确实,execute_from_command_line 的参数,顾名思义,是一个解析后的命令行,其中第一个元素是可执行文件名,其他元素是参数

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-13
      • 1970-01-01
      • 2013-03-23
      • 2016-07-20
      • 2015-12-09
      • 1970-01-01
      • 2019-07-24
      • 2020-05-25
      相关资源
      最近更新 更多