django manage.py 如何将项目包放在 sys.path 上

Leo*_*o.Z 5 python django

我阅读了 django文档和一些 SO 帖子来了解 manage.py 和 django-admin.py 之间的区别。

\n\n

他们都说:

\n\n
\n

Manage.py 会在每个 Django 项目中自动创建。manage.py\n 是 django-admin.py 的一个薄包装,在委托给 django-admin.py 之前,它会为你处理两件事:

\n\n
    \n
  1. 它将您的项目\xe2\x80\x99s 包放在sys.path 上。
  2. \n
  3. 它设置 DJANGO_SETTINGS_MODULE 环境变量,使其指向\n 您的项目\xe2\x80\x99s settings.py 文件。
  4. \n
\n
\n\n

所以我检查了这两个文件的源代码(最新版本,所以它是文档)。

\n\n

然后我就很困惑了。manage.py执行第二件事:设置 DJANGO_SETTINGS_MODULE 环境变量。除此之外,我真的找不到这两个脚本之间的任何区别。

\n\n

[django-admin.py]

\n\n
#!/usr/bin/env python\nfrom django.core import management\n\nif __name__ == "__main__":\n    management.execute_from_command_line()\n
Run Code Online (Sandbox Code Playgroud)\n\n

[管理.py]

\n\n
#!/usr/bin/env python\nimport os\nimport sys\n\nif __name__ == "__main__":\n    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "{{ project_name }}.settings")\n\n    from django.core.management import execute_from_command_line\n\n    execute_from_command_line(sys.argv)\n
Run Code Online (Sandbox Code Playgroud)\n\n

为什么?django 文档已经过时了吗?或者我在这里错过了什么?将project\xe2\x80\x99s 包放在sys.path 上的代码在哪里?

\n

Mac*_*Gol 3

使用位于此处的声明此处进行sys.path更新。执行路径如下:handle_default_options(options)

  • execute_from_command_line(argv)(你的manage.py
  • utility.execute() 这里
  • handle_default_options(options) 这里

Command用作管理命令基类的类也使用相同的方法。