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

2024-01-15

我读了 djangodoc https://docs.djangoproject.com/en/dev/ref/django-admin/和一些SO帖子来了解manage.py和django-admin.py之间的区别。

他们都说:

Manage.py 会在每个 Django 项目中自动创建。管理.py 是 django-admin.py 的一个薄包装,负责两件事 在委托给 django-admin.py 之前为您提供:

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

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

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

[django-admin.py]

#!/usr/bin/env python
from django.core import management

if __name__ == "__main__":
    management.execute_from_command_line()

[管理.py]

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

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "{{ project_name }}.settings")

    from django.core.management import execute_from_command_line

    execute_from_command_line(sys.argv)

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


The sys.path已更新here https://github.com/django/django/blob/1.5.4/django/core/management/base.py#L45 using handle_default_options(options)声明位于here https://github.com/django/django/blob/1.5.4/django/core/management/__init__.py#L364。执行路径如下:

  • execute_from_command_line(argv) (your manage.py)
  • utility.execute() here https://github.com/django/django/blob/1.5.4/django/core/management/__init__.py#L364
  • handle_default_options(options) here https://github.com/django/django/blob/1.5.4/django/core/management/__init__.py#L364

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

django manage.py 如何将项目包放在 sys.path 上 的相关文章

随机推荐